Meu computador morreu e agora um dos meus repositórios git está quebrado. Quando tento fazer checkout master, ele me diz:
warning: ignoring broken ref refs/heads/master.
error: Your local changes to the following files would be overwritten by checkout:
com.vainolo.jdraw2d.releng.p2/pom.xml
Please, commit your changes or stash them before you can switch branches.
Aborting
Quando eu executo git stash
eu obtenho:
fatal: bad revision 'HEAD'
fatal: bad revision 'HEAD'
fatal: Needed a single revision
You do not have the initial commit yet
Então o que eu posso fazer?
Saída de atualização de git reflog
:
fatal: bad default revision 'HEAD'
Não muito promissor ... Resultado de git fsck
:
error: Invalid HEAD
Checking object directories: 100% (256/256), done.
error: unable to unpack 59551f96b4e87a1c14293c19eb548ce6fa1f196f header
error: inflateEnd: stream consistency error (no message)
fatal: loose object 59551f96b4e87a1c14293c19eb548ce6fa1f196f (stored in .git/objects/59/551f96b4e87a1c14293c19eb548ce6fa1f196f) is corrupt
.git/refs/heads/master
existe e se seu conteúdo é um hash de commit válido do seu repositório (você pode verificar isso, por exemplo, usandogit show <hash>
)?.git/refs/heads/master/
é um monte de^@
git reflog
isso te diz? Você já tentou corrergit fsck
?Respostas:
Consegui me recuperar através de:
fonte
rm <root repository path>/.git/modules/<path to the submodule>/refs/remotes/origin/HEAD
rm -rf .git/refs/remotes/origin
, mas você me indicou a direção certaComece seguindo as etapas sugeridas em Recuperando repositório git quebrado :
.git/refs
ainda contém algo útilgit reflog
e falhando se o conteúdo de.git/logs/refs/heads/master
ou qualquer outro ramo em que você estavagit fsck
, potencialmente com--unreachable
ou--lost-found
Esperançosamente, isso permitirá que você descubra qual
master
deve ser o ref para que você possa restaurá-lo (ou seja, inserir o SHA1 correto.git/refs/heads/master
).No caso de qualquer objeto contido naquele commit estar genuinamente corrompido, você não pode restaurar seu
HEAD
commit infelizmente. Assumindo que sua árvore de trabalho e / ou índice estão intactos, você pode tentar umgit reset --soft
(ou não agit reset
) para o commit anterior e então refazer o commit. Evite quaisquer operações que alterem seu sagit checkout -f
ou árvore de trabalhogit reset --hard
.fonte
.git/logs/refs/heads/mybranch
. Mostra algum tipo de histórico de commits para este branch. Procurando por isso, selecionei SHAs e tentei exibi-los comgit show
. (Cada commit tem dois SHAs, eu escolhi o segundo, logo antes do nome do autor.) O último estava corrompido, mas o anterior poderia sergit show
n e eu fui capaz de enviá-lo comgit push origin abcdef:mybranch
.Eu tive um problema semelhante após uma tela azul da morte no Windows 8.1
Eu tinha um arquivo neste local ...
C:\www\<project>\.git\refs\remotes\origin\<problem-branch>
E estava vazio, enquanto os outros arquivos de ramificação nesta pasta tinham longas cadeias de caracteres dentro deles.
NB eu não tive nenhuma mudança / commits
<problem-branch>
arquivogit fetch --all
para obter o galho novamenteEntão, o preenchimento automático da guia começou a funcionar novamente
fonte
Se não houver muitos arquivos modificados, acho que a maneira conveniente de resolver esse problema é:
git commit -a
fonte
Consegui resolver isso excluindo o arquivo mestre no diretório git \ refs \ heads
fonte
Após um congelamento computadorizada e acidente, meu git branch foi danificado com a mensagem:
git fatal: your current branch appears to be broken
. Eu não pude fazer nada.Depois de fazer
git fsck
mencionei que o ramo tinha umerror: Invalid HEAD
.refs/heads/<branch>
teve uminvalid sha1 pointer
.Ao seguir as opções aqui, abri
.git/refs/heads/<branch>
em um editor notepad ++, e cada um dos caracteres sha1 eraNUL
.Felizmente, só precisei redefinir o branch para o estado remoto, e isso estava em um repositório bitbucket. Peguei o sha1 da ponta do repositório remoto e copiei para
.git/refs/heads/<branch>
salvá-lo, depois fiz umgit reset --hard HEAD
e tudo voltou ao normal.fonte
Eu fui idiota o suficiente para esquecer de empurrar e meu computador travou enquanto realizava um commit. Eu poderia recuperar tudo, exceto o último commit, abrindo .git / logs / refs / heads /
Este arquivo contém todos os commits (com seus SHAs) para o branch, o que eu fiz para recuperar foi:
git checkout master
git reset --hard
Então, mesmo quando você comete um erro estúpido, você não é imediatamente levado de volta por um dia inteiro de trabalho com git :)
fonte
Eu sei que é uma resposta tarde demais, mas estava recebendo este erro porque não tinha um
origin/head
. Você pode descobrir isso executandogit branch -r
. Se você nãoorigin/head
vir que está apontando para uma origem remota, você pode definir isso executandogit remote set-head origin {{your branch name}}
.Agora execute
git branch -r
novamente e você verá algo assim:origin/HEAD -> origin/develop
Espero que isso ajude qualquer pessoa que esteja enfrentando esse problema.
fonte
Não consegui fazer o checkout do meu branch master devido ao erro de não é possível bloquear ref. Acabei excluindo:
.git/refs/remotes/origin/HEAD
.git/refs/remotes/origin/master
e chamando este comando git:
fonte
Perdoe-me se eu repetiria depois de alguém (não li todos os comentários). Na minha opinião, a maneira mais simples de resolver o problema é copiar o projeto sem .git e .idea, limpar, clonar do git, excluir tudo, exceto os diretórios acima e, em seguida, colar a cópia anterior no repo recém-criado com .git e .idea . Espero que faça sentido.
fonte
Meu computador travou duas vezes e, como resultado, meu repositório git foi danificado localmente. Não consegui puxar minhas alterações, ele pediu para definir a origem remota, mas não funcionou no gitKraken.
No meu prompt de comando, estava recebendo este erro
Eu sabia que minhas referências estão quebradas e precisam ser consertadas. O que tive que fazer foi fazer o git bash (no SourceTree clique em "terminal"). Em seguida, navegue até a pasta de referências como esta
haverá um nome de arquivo
master
lá, usels
para ver o que está no diretório. Em seguida, basta excluí-lo usando o rm masterbam, o arquivo corrompido sumiu. Agora, se você emitir o comando git branch -a, ele produzirá este
Em seguida, emita este comando, e ele corrigirá suas referências
Para resumir, se você tentar puxar o controle remoto, ele deve mostrar o nome do controle remoto em branco que foi corrigido.
fonte
Eu tive o mesmo problema, mas sem sorte, não consegui descobrir o problema. Peguei meu repo de lado, reclonei o do servidor e tentei mesclar entre eles. Claro que mostrou muitos arquivos não relacionados ao meu branch, mas ajudou a isolar os arquivos necessários.
fonte
Verifique se o MSWindows criou arquivos desktop.ini que estão ambos herdando o git? é para mim. Depois que eu excluo todos eles nas subpastas do diretório .git, tudo funciona.
fonte
Tive o mesmo problema quando o Android Studio foi encerrado repentinamente (devido à perda de energia do computador).
Eu resolvi isso copiando o conteúdo do meu
C:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\refs\heads\master
arquivo para o meuC:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\refs\remotes\origin\master
arquivo.(Anteriormente, eu também tinha ativado a opção 'Forçar envio' no Android Studio, mas não acho que essa foi uma etapa necessária.)
Nota:
Eu encontrei essa solução comparando o conteúdo dos arquivos em meu
C:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\
diretório (incluindo subdiretórios) com os arquivos correspondentes daqueles em outro projeto saudável - por exemploC:\Users\myusername\AndroidStudioProjects\MyHealthyApp\.git\
,.Você pode ter um arquivo diferente que está corrompido, mas comparando com outro projeto íntegro, você deve ser capaz de detectar rapidamente o que está errado.
Se você não tiver outro projeto saudável que tenha git configurado, pode valer a pena criar um simples da mesma maneira que você criou seu projeto quebrado para que possa investigar, comparar e corrigir, etc.
PS - Minha mensagem de erro (editada) foi:
warning: ignoring broken refs/remotes/origin/master.fatal bad revision 'refs/remotes/origin/master..refs/heads/master' during executing git -c core.quotepath=false log refs/remotes/origin/master..refs/heads/master --pretty=format --encoding=UTF-8 -M --name-status -c --
fonte