git fsck

Administração

Verifica o repositório e encontra objetos inalcançáveis


O comando 'git fsck' (file system check) verifica se cada objeto do repositório está íntegro e se o histórico está todo conectado. Também relata objetos órfãos (dangling) — commits e arquivos para os quais nada mais aponta, como um commit deixado por git reset --hard depois que o reflog o esquece. Eles ainda podem ser recuperados até o git gc apagá-los.

Sinopse

git fsck [--unreachable] [--no-reflogs] [--lost-found] [--full] [<object>...]
[ ] opcional| ou<arg> valor a substituir... repetível--flag opção

Opções

Clique em uma opção para expandir

Iniciante (2)

Não conta as entradas do reflog como referências: relata commits que só o reflog lembra.

Quando necessárioListar commits mantidos vivos só pelo reflog

Exemplo

git fsck --no-reflogs

Grava objetos órfãos em .git/lost-found (implica --no-reflogs).

Quando necessárioJuntar objetos perdidos num só lugar

Exemplo

git fsck --lost-found

Escolhendo a opção certa

Encontrar trabalho perdido

Tente primeiro o reflog

ComandoEncontra
git reflogTodos os lugares por onde o HEAD passou (o mais fácil)
git fsck --no-reflogsCommits que nenhuma ref alcança
git fsck --lost-foundTambém arquivos órfãos (p. ex. preparados e depois perdidos)

Exemplos

Conferir

git fsck

Silencioso quando tudo está bem.


Encontrar commits perdidos

git fsck --no-reflogs

Commits que nenhum branch ou tag alcança.


Recolhê-los

git fsck --lost-found

Copia-os para .git/lost-found.

Exemplos de fluxos de trabalho

1
git fsck --no-reflogs

Encontrar commits órfãos

2
git show <hash>

Conferi-lo

3
git branch rescue <hash>

Guardá-lo

Solução de problemas

error: object file … is empty / corrupt

Causa: Dano do disco ou de uma queda

Busque uma cópia nova do remoto; faça antes backup de .git

Dicas e armadilhas

Boas práticas

  • ✓Execute git fsck quando suspeitar de corrupção, antes do git gc.

Erros comuns

  • ✗Entrar em pânico com objetos «dangling» — são sobras normais, limpas pelo git gc.

Perguntas frequentes

A:

Um commit para o qual nada aponta. Ele é mantido até o git gc removê-lo (por padrão, depois que a entrada do reflog expira).