Git master branch corrompido

8

Eu abro meu repositório Git usando o 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 esta é a primeira vez que a abri desde a atualização.

Não tenho certeza do que fazer para recuperar meus commits.

Quando eu digito

git log 

Eu recebo

fatal:bad default revision 'HEAD'

Atualizar
Depois de analisar o link , tentei

git fsck

retornou:

error: Invalid HEAD
fatal: loose object 36b7d9e1ca496bcb864c0b9c8671fcec97fbda31 (stored in .git/obj ects/36/b7d9e1ca496bcb864c0b9c8671fcec97fbda31) is corrupt

Confirmação de devoluções:

error: unable to resolve reference HEAD: No such file or directory
fatal: cannot lock HEAD ref

e registro de ramificações mestras

$ git log master warning: ignoring broken ref refs/heads/master. warning: ignoring broken ref refs/heads/master. fatal: ambiguous argument 'master': unknown revision or path not in the working tree. Use '--' to separate paths from revisions

Vou continuar colando coisas que possam ser relevantes

$ git reflog master
warning: ignoring broken ref refs/heads/master.
warning: ignoring broken ref refs/heads/master.
fatal: ambiguous argument 'master': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

Mais possivelmente informação útil: toda vez que eu apago o arquivo corrompido, outro pega o lugar. Estou começando a pensar que tem algo a ver com o ramo mestre apontando para a coisa errada ou algo assim. porque eu suponho que a cabeça está apontando para o mestre.

Um dia depois:
Então eu coloquei meu companheiro nisso, ele foi capaz de passar pelos logs e ele disse que os hashes nos logs não correspondem aos objetos na pasta. Ele tentou resetar o branch master para os logs ou algo assim, eu fiquei um pouco perdido. Espero que seja útil

    
por MrJD 09.05.2012 / 04:21

4 respostas

2

The repository exists, but all my commits have disappeared.

O que exatamente você quer dizer? A árvore de trabalho ainda está lá? O .git/ existe? Há algum arquivo nele?

As mensagens que você postou sugerem que o arquivo .git/HEAD não existe. Define o estado esperado da árvore de trabalho (o que você fez check out). Se esse arquivo sumiu, o git não sabe onde você estava.

Você pode tentar criar o arquivo sozinho com este conteúdo: ref: refs/heads/master

Se você estivesse em uma ramificação diferente, basta substituir "master" pelo nome da ramificação. Se você não estivesse em um ramo, 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 SHA1 na frente referem-se a commits. Você deveria ser capaz de encontrá-los no log de ramificação, por exemplo, .git/logs/refs/heads/master .

A saída do reflito do git que você deu parece com refs/heads/master também está ausente. Seu conteúdo exclusivo deve ser o SHA1 do último commit nele (e uma nova linha). Você pode encontrar o último SHA1 no final do log de ramificação, por exemplo, .git/logs/refs/heads/master .

    
por 07.09.2012 / 18:09
1

Se .git / HEAD existir e seu conteúdo for ref: refs/heads/master , então, verificará se o arquivo refs / heads / master deve conter o sha1 do último commit.

Se esse arquivo estiver corrompido e cheio de caracteres NULL Edite esse arquivo e coloque o sha1 do commit mais recente de .git/logs/HEAD ou antes do último commit.

Então, git reset --hard 'sha1 of the commit that you selected'

    
por 01.12.2014 / 13:25
0

Parece que o seu repo foi corrompido. A coisa mais fácil de fazer seria recuperar seu repositório de um backup ou re-clonar o repositório da fonte original (supondo que você não tenha toneladas de trabalho no repositório).

Se a resonação / clonagem não for uma opção, recomendo a leitura do Pro Git (livro on-line gratuito ou o versão de papel ). O livro todo é muito informativo, mas especialmente dê uma olhada no último capítulo para entender como o Git funciona internamente. Uma vez que você tenha uma compreensão de como o Git funciona, dê uma olhada no Linus ' instruções sobre como recuperar objetos corrompidos .

    
por 09.05.2012 / 16:37
0

Depois de navegar pela web por um tempo, finalmente encontrei e funcionou.

git fetch origin
git reset --hard origin/master
    
por 13.08.2016 / 16:20