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/HEAD
nã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/HEAD
registra 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/master
A 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/master
verificado, 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/HEAD
ou 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