Abro meu repositório Git usando gitExtensions no Windows 7 para um projeto do Visual Studio. De repente está vazio. O repositório existe, mas todos os meus commits desapareceram.
Estou usando a interface gráfica e acredito que seja a primeira vez que a abri desde que a atualizou.
Não sei o que fazer para recuperar meus commits.
Quando digito
git log
eu recebi
fatal: revisão padrão incorreta 'HEAD'
Atualização
Depois de olhar para /programming/1545407/recovering-broken-git-repository, tentei
git fsck
retornou:
erro:
fatal HEAD inválido : o objeto solto 36b7d9e1ca496bcb864c0b9c8671fcec97fbda31 (armazenado em .git / obj ects / 36 / b7d9e1ca496bcb864c0b9c8671fcec97fbda31) está corrompido
Confirmar retornos:
erro: incapaz de resolver a referência HEAD: Nenhum arquivo ou diretório
fatal: não é possível bloquear HEAD ref
e registrando devoluções de ramificações principais
$ git log master warning: ignorando ref refs / heads / master quebrados. aviso: ignorando ref refs / heads / master quebrados. fatal: argumento ambíguo 'mestre': revisão desconhecida ou caminho que não está na árvore de trabalho. Use '-' para separar caminhos das revisões
Vou continuar colando coisas que podem ser relevantes
Aviso principal do $ git reflog
: ignorando ref refs / heads / master quebrados.
aviso: ignorando ref refs / heads / master quebrados.
fatal: argumento ambíguo 'mestre': revisão desconhecida ou caminho que não está na árvore de trabalho.
Use '-' para separar caminhos das revisões
Informações possivelmente mais úteis: toda vez que eu apago o arquivo corrompido, outro ocorre. Estou começando a pensar que é algo a ver com o ramo principal apontando para a coisa errada ou algo assim. porque eu assumo que a cabeça está apontando para o mestre.
Um dia depois:
então eu coloquei meu companheiro nisso, ele foi capaz de examinar os logs e disse que os hashes nos logs não correspondem aos objetos da pasta. Ele tentou redefinir a ramificação principal para os logs ou algo assim, fiquei um pouco perdido. Espero que seja útil
Respostas:
O que exatamente você quer dizer? A árvore de trabalho ainda está lá? Existe
.git/
? Existem arquivos nele?As mensagens que você postou sugerem que o arquivo
.git/HEAD
não existe. Ele define o estado esperado da árvore de trabalho (o que você fez check-out). Se esse arquivo desapareceu, o git não sabe onde você estava.Você pode tentar criar o arquivo você mesmo, com este conteúdo:
ref: refs/heads/master
Se você estava em uma ramificação diferente, substitua "master" pelo nome da ramificação. Se você não estivesse em um galho, seria mais complicado.
.git/logs/HEAD
registra estados passados de HEAD, com linhas posteriores na parte inferior. Esta linha de exemplo mostra um checkout:25f2a6099fb5f9f2192a510c42f704f9fc4bcecb 65abb1a3dc102e2498860f01fb179cda4c51decb Rainer Blome <[email protected]> 1346938344 +0200 checkout: moving from master to MySuperBranch
Os SHA1s na frente referem-se a confirmações. Você deve encontrá-los no log de ramificação, por exemplo
.git/logs/refs/heads/master
.Também
refs/heads/master
está faltando a saída do git reflog que você forneceu . Seu único conteúdo deve ser o SHA1 da confirmação mais recente (e uma nova linha). Você pode encontrar o SHA1 mais recente no final do log da filial, por exemplo.git/logs/refs/heads/master
.fonte
Se .git / HEAD existe e seu conteúdo é
ref: refs/heads/master
verificado no arquivo refs / heads / master, ele deve conter o sha1 da última confirmação.Se esse arquivo estiver corrompido e cheio de caracteres NULL Edite esse arquivo e coloque o sha1 da confirmação mais recente
.git/logs/HEAD
ou a anterior à última confirmação.Então faça
git reset --hard 'sha1 of the commit that you selected'
fonte
Parece que seu repositório foi corrompido. A coisa mais fácil a fazer seria recuperar seu repositório de um backup ou cloná-lo novamente da fonte original (supondo que você não tenha muito trabalho no repositório).
Se a redefinição / clonagem não for uma opção, eu recomendaria a leitura no Pro Git (livro on-line gratuito ou versão em papel ). O livro inteiro é muito informativo, mas especialmente dê uma olhada no último capítulo para entender como o Git funciona internamente. Depois de entender como o Git funciona, consulte as instruções de Linus sobre a recuperação de objetos corrompidos .
fonte
Depois de navegar na web por um tempo, finalmente encontrei isso e funcionou.
fonte
origin
(espero que não seja muito trabalho feito localmente) e força amaster
filial local a concordar com o controle remoto. Cuidado,--reset
meios descartar quaisquer alterações locais! Além disso, se não estivesse muito quebrado, apenasgit reset origin/master
teria restaurado o último estado conhecido (registrado) damaster
ramificação.