Eu bati isso aleatoriamente hoje ao tentar executar a coleta de lixo do Git :
$ git gc
fatal: bad object refs/remotes/origin/HEAD
error: failed to run repack
Como faço para lidar com isso?
git
git-remote
git-fetch
git-gc
Ryan
fonte
fonte
master
para outro chamadodevelop
. Dias antes de eu voltar a alterar de edevelop
para excluir a ramificação padrão antiga , mas no meu diretório de trabalho, o arquivo ainda estava apontando para o qual não existe mais. Nessa situação, a remoção do arquivo funcionou.master
develop
.git/refs/remotes/origin/HEAD
refs/remotes/origin/develop
git prune
funcionou para mim, uma maneira de excluir dados acumulados no Git, mas que não estão sendo referenciados por nada útil.$ mv .git/refs/remotes/origin/HEAD /tmp
$ git gc
git prune
git gc
funcionou para mim #O problema que eu encontrei (que é o mesmo problema que o @Stavarengo mencionou neste comentário acima) é que o ramo remoto padrão (
develop
no meu caso) foi excluído, mas ainda foi mencionado em.git/refs/remotes/origin/HEAD
.A abertura
.git/refs/remotes/origin/HEAD
no meu editor mostrou isso:Eu o editei cuidadosamente para apontar para o meu novo ramo padrão e tudo estava bem:
A pista que me deu a dica foi que a corrida
git prune
mostrou este erro:fonte
Depois de ver a resposta de Trenton, olhei para a minha
.git/refs/remotes/origin/HEAD
e vi que ela também estava apontando para um ramo antigo que agora foi excluído.Mas, em vez de editar o arquivo, tentei a solução de Ryan:
Ele definiu automaticamente o arquivo para a nova ramificação e
git gc
funcionou bem depois disso.fonte
git remote set-head $REMOTE --auto
no meu caso, $ REMOTE é o alias remoto, não a "origem" padrão, porque tenho vários controles remotos configurados.Eu pensei que a solução era a seguinte, pois isso parecia funcionar, mas acaba não resolvendo o problema.
fonte
git prune
(como recomendado na saída do primeiro comando), portanto não sou capaz de dizer exatamente o que me ajudou - primeiro, segundo ou ambos.git remote set-head origin --auto
fixa o meu refs / remotes / origem arquivo / HEAD sem me ter de usargit prune
error: Multiple remote HEAD branches. Please choose one explicitly
e tive que usargit remote set-head origin mybranch
(enquanto o ramo 'mybranch' estava fazendo checkout) para obter o erro.Parece que suas referências simbólicas podem estar quebradas ... Tente substituí-lo por sua ramificação padrão da seguinte maneira: Por exemplo, minha ramificação padrão é master
Isso deve consertar.
fonte
Se você estiver usando workstes git, verifique se está fazendo um
antes de correr
Eu tinha uma árvore de trabalho corrompida e isso parecia funcionar depois de remover a árvore de trabalho corrompida.
git prune
por si só não parecia funcionar.fonte
A causa disso para mim estava trabalhando em uma pasta compactada no Windows. Quando a pasta foi descompactada, ela corrompeu os arquivos do pacote, causando outros problemas estranhos, como não poder remover ramificações inexistentes.
A única correção foi limpar o diretório de trabalho e clonar o (s) controle remoto (s) repo novamente. Felizmente, eu ainda podia enviar e receber atualizações para garantir que nada foi perdido. Tudo está bem agora.
fonte