git reflog

Inspeção e comparação

Mostra por onde HEAD e os branches passaram


O comando 'git reflog' lista cada posição que HEAD já teve: cada commit, troca de branch, reset, merge e rebase, do mais recente ao mais antigo. Ele é local ao seu repositório e é a rede de segurança do trabalho perdido — commits removidos de um branch por um reset ou rebase continuam listados e podem ser recuperados com HEAD@{n}. Por padrão, as entradas expiram após 90 dias.

Sinopse

git reflog [show] [<log-options>] [<ref>]
[ ] opcional| ou<arg> valor a substituir... repetível--flag opção

Opções

Clique em uma opção para expandir

Iniciante (1)

Limita a lista às n entradas mais recentes (também escrito -<n>).

RecomendadoAs entradas mais recentes costumam ser as que você precisa

Exemplo

git reflog -n 5

Escolhendo a opção certa

log versus reflog

Dois históricos

ComandoListaCompartilhado?
git logCommits alcançáveis a partir de um branchSim, junto com os commits
git reflogCada movimento do HEAD, mesmo para commits que nenhum branch temNão, só local

Exemplos

Listar os movimentos do HEAD

git reflog

Do mais recente ao mais antigo, com nomes HEAD@{n}.


Desfazer um reset

git reset --hard HEAD@{1}

Volta para onde HEAD estava um movimento atrás.


Reflog de um branch

git reflog show main

Só os movimentos de main.

Exemplos de fluxos de trabalho

1
git reflog

Encontrar a entrada anterior ao reset

2
git reset --hard HEAD@{1}

Voltar para ela

1
git reflog

Encontrar o último commit desse branch

2
git switch -c feature/login a1b2c3d

Recriar o branch ali

Solução de problemas

O commit não está no reflog

Causa: Ele nunca foi usado aqui, ou a entrada expirou

Tente git fsck --lost-found para commits órfãos

HEAD@{1} aponta para um lugar inesperado

Causa: Cada troca de branch também conta como movimento

Leia o reflog e escolha a entrada exata

Dicas e armadilhas

Boas práticas

  • ✓Consulte git reflog antes de entrar em pânico por commits perdidos.
  • ✓Recupere primeiro num branch novo (git switch -c rescue <hash>) para examinar com segurança.

Erros comuns

  • ✗Achar que um reset --hard apagou commits de vez — o reflog ainda os tem.
  • ✗Esperar demais: commits inalcançáveis somem quando as entradas do reflog expiram e o git gc roda.
  • ✗Esperar o reflog em outra máquina — ele nunca é enviado nem clonado.

Perguntas frequentes

A:

Por padrão, 90 dias para as alcançáveis e 30 dias para as inalcançáveis.

A:

Não, ele só lista. Quem remove entradas são git reflog expire e delete.