AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 78089645
Accepted
MadScientist
MadScientist
Asked: 2024-03-02 02:01:23 +0800 CST2024-03-02 02:01:23 +0800 CST 2024-03-02 02:01:23 +0800 CST

Como remover ramificações do Git que apresentam erro “não aponta para um objeto válido”

  • 772

Eu tenho um repositório Git que contém vários ramos remotos que não existem mais, mas quando tento executar git fetch -precebo um erro:

error: refs/remotes/origin/bad/branch does not point to a valid object!

Não consigo encontrar nenhuma maneira de consertar isso. Este branch não existe como um arquivo separado em .git/refs/remotes(ou em qualquer outro lugar; pesquisei com find). Tentar excluí-lo git branch -Dnão funciona:

$ git branch -D origin/bad/branch
error: branch 'origin/bad/branch' not found.
$ git branch -D bad/branch
error: branch 'bad/branch' not found.

Após os comentários abaixo, tentei adicionar a -ropção ao git branch -De recebi este erro:

$ git branch -D -r origin/bad/branch
error: Couldn't look up commit object for 'refs/remotes/origin/bad/branch'

Existe algum comando mágico de encanamento que eu possa usar para me livrar dessa referência, exceto apenas excluir todo o espaço de trabalho, o que eu realmente preferiria não fazer?

git
  • 3 3 respostas
  • 48 Views

3 respostas

  • Voted
  1. Best Answer
    Guildenstern
    2024-03-02T06:26:03+08:002024-03-02T06:26:03+08:00

    Este comando forçará a exclusão de um branch de rastreamento remoto:

    git branch -D -r origin/bad/branch
    

    Mas isso não funcionou.

    Quando os comandos de nível superior são muito teimosos para fazer o que você deseja, você pode tentar um comando de nível inferior:

    git update-ref -d origin/bad/branch
    

    Excluindo manualmente

    Observe que geralmente não é recomendado editar manualmente as coisas. Mas pode ser necessário. Sem garantias.

    Pelo que sei, as referências estão atualmente armazenadas [1] em dois locais possíveis:

    • Como arquivos em.git/refs
    • Como uma referência compactada em .git/packed-refs(arquivo)

    Se for um arquivo, ele origin/bad/branchserá armazenado em .git/refs/origin/bad/branch. Apenas excluir esse arquivo deve ser seguro.

    Se for um ref: open compactado .git/packes-refs. Não li nenhuma documentação técnica para este formato de arquivo, mas ele se parece apenas com um arquivo no formulário:

    hash<space>full ref path<newline>
    

    Nesse caso, você pode encontrar a referência em uma linha como:

    [hash or some nonsense value?]<space>refs/origin/bad/branch<newline>
    

    Eu acho que você poderia simplesmente excluir essa linha. Mas primeiro faça isso em um backup de todo o repositório (e da árvore de trabalho) apenas por segurança.

    Notas

    1. Atualmente (01/03/2024) há trabalho em andamento em um “back-end reutilizável”. Não sei o que é isso concretamente, mas você deve esperar um formato binário que não seja tão fácil de usar manualmente.
    • 2
  2. Michael R. Wilson
    2024-03-02T02:09:45+08:002024-03-02T02:09:45+08:00

    Supondo que você não tenha trabalho inacabado/não salvo no repositório que não consiga confirmar/enviar, isso não poderia ser facilmente corrigido simplesmente excluindo o repositório localmente e clonando-o de volta em sua máquina?

    Além disso, encontrei esta pergunta antiga que pode conter informações úteis: remova filiais que não estejam remotas

    • 1
  3. Adam Hess
    2024-03-02T05:57:43+08:002024-03-02T05:57:43+08:00

    git não é mágico. Ele precisa armazenar suas informações em algum lugar e esse lugar é o diretório .git. ele armazena todas as configurações, objetos e referências pertencentes ao seu projeto/repositório atual.

    .git/refscontém todas as referências que você tem em seu repositório.

    A .git/refs/HEADSlista de todas as referências que você está gerenciando localmente. Se você abrir qualquer um desses arquivos, verá que há um hash ali, que faz referência ao commit ao qual esse branch faz referência. Você provavelmente olha lá e simplesmente exclui a referência ao ramo ao qual está se referindo. (lembre-se de que se essa ramificação não existir na origem, ou seja, no seu servidor, você efetivamente perdeu seu trabalho, a menos que consiga se lembrar do nome da ramificação e o GC não tenha limpo as referências pendentes.)

    também não é difícil descobrir que isso .git/refs/remotes/se refere a todos os servidores aos quais você conectou seu repositório git e às referências armazenadas lá. Na maioria dos casos, você terá apenas um origindiretório.

    Se você quiser vê-lo em ação, renomeie o .git/refs/remotes/origindiretório e execute, git pullvocê verá os logs mostrando que há novas ramificações para consultar.

    Basicamente, exclua o branch incorreto que está na sua .git/refs/HEADSpasta local que corresponde ao branch que está dificultando e tente novamente.

    • 1

relate perguntas

  • Acidentalmente, cliquei em um botão que excluiu todos os commits feitos para um site, mas tenho um backup no meu computador - como restaurar? [fechado]

  • Modificando autores e utilizando Git Rebase em fluxos de trabalho colaborativos

  • Como imprimir facilmente as informações padrão do autor do Git?

  • Qual é a maneira certa de extrair minhas alterações do gitlab para o servidor remoto?

  • Posso rebasear e mesclar uma solicitação pull para uma ramificação que bloqueia push e commits não assinados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle?

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Quando devo usar um std::inplace_vector em vez de um std::vector?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Martin Hope
    Aleksandr Dubinsky Por que a correspondência de padrões com o switch no InetAddress falha com 'não cobre todos os valores de entrada possíveis'? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer Quando devo usar um std::inplace_vector em vez de um std::vector? 2024-10-29 23:01:00 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST
  • Martin Hope
    MarkB Por que o GCC gera código que executa condicionalmente uma implementação SIMD? 2024-02-17 06:17:14 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve