Ramo mestre corrompido do Git

Ramo mestre corrompido do Git

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 abro desde que a atualizaram.

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

Quando eu digito

git log 

eu recebi

fatal: revisão padrão incorreta 'HEAD'

Atualizar
Depois de olharhttps://stackoverflow.com/questions/1545407/recovering-broken-git-repositorytentei

git fsck

retornou:

erro: HEAD
fatal inválido: objeto solto 36b7d9e1ca496bcb864c0b9c8671fcec97fbda31 (armazenado em .git/obj ects/36/b7d9e1ca496bcb864c0b9c8671fcec97fbda31) está corrompido

Confirmando retornos:

erro: não foi possível resolver a referência HEAD: esse arquivo ou diretório não existe
fatal: não é possível bloquear a referência HEAD

e registrar retornos da ramificação mestre

$ git log master warning: ignorando refs/heads/master quebrados. aviso: ignorando refs/heads/master quebrados. fatal: argumento ambíguo 'master': revisão desconhecida ou caminho que não está na árvore de trabalho. Use '--' para separar caminhos de revisões

Vou continuar colando coisas que podem ser relevantes

$ git reflog master
warning: ignorando refs/heads/master quebrados.
aviso: ignorando refs/heads/master quebrados.
fatal: argumento ambíguo 'master': revisão desconhecida ou caminho que não está na árvore de trabalho.
Use '--' para separar caminhos de revisões

Informações mais possivelmente úteis: toda vez que excluo o arquivo corrompido, outro toma seu lugar. Estou começando a pensar que tem algo a ver com o branch master apontando para a coisa errada ou algo assim. porque presumo que a cabeça esteja apontando para o mestre.

Um dia depois:
Então coloquei meu amigo nisso, ele conseguiu examinar os logs e disse que os hashes nos logs não correspondem aos objetos na pasta. Ele tentou redefinir o branch master para os logs ou algo parecido, fiquei um pouco perdido. Espero que isso seja útil

Responder1

O repositório existe, mas todos os meus commits desapareceram.

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

As mensagens que você postou sugerem que o arquivo .git/HEADnão existe. Ele define o estado esperado da árvore de trabalho (o que você verificou). Se esse arquivo sumir, 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ê estiver em uma ramificação diferente, basta substituir “master” pelo nome da ramificação. Se você não estivesse em um galho seria mais complicado.

.git/logs/HEADregistra estados anteriores de HEAD, com linhas posteriores na parte inferior. Esta linha de exemplo mostra uma finalização da compra: 25f2a6099fb5f9f2192a510c42f704f9fc4bcecb 65abb1a3dc102e2498860f01fb179cda4c51decb Rainer Blome <[email protected]> 1346938344 +0200 checkout: moving from master to MySuperBranch

Os SHA1s na frente referem-se a commits. Você deve conseguir encontrá-los no log da filial, por exemplo .git/logs/refs/heads/master.

refs/heads/masterA saída do git reflog que você forneceu também parece estar faltando. Seu único conteúdo deveria ser o SHA1 do commit mais recente (e uma nova linha). Você pode encontrar o SHA1 mais recente no final do log da ramificação, por exemplo .git/logs/refs/heads/master.

Responder2

Se .git/HEAD existir e seu conteúdo for ref: refs/heads/masterverificado, 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 último commit .git/logs/HEADou anterior ao último commit.

Então façagit reset --hard 'sha1 of the commit that you selected'

Responder3

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

Se redefinir/clonar não for uma opção, eu recomendaria lerPró Git(livro on-line gratuito ou oversão em papel). O livro inteiro é muito informativo, mas dê uma olhada principalmente no último capítulo para entender como o Git funciona internamente. Depois de entender como o Git funciona, dê uma olhada no Linus'instruções sobre como recuperar objetos corrompidos.

Responder4

Depois de navegar um pouco na web, finalmente encontrei isso e funcionou.

git fetch origin
git reset --hard origin/master

informação relacionada