Reflog é um recurso do Git que armazena informações das alterações de branch, commit, merge, rebase, checkout, entre outros (uma espécie de dedo duro 🫣).

Diferente do git log, que rastreia commits de todas as pessoas do projeto, o reflog é armazenado localmente e apenas você tem acesso as informações referente as atualizações que fez (cada pessoa do projeto tem seu próprio reflog).

Ao dar o comando git reflog você terá acesso as atualizações que você fez no projeto nos últimos 90 dias (esse tempo pode ser alterado), tendo acesso a informações que não são mais visíveis através dos comandos como git log e git branch.

Image description

Podemos identificar cada alteração através de 2 formas:

  • Hashs (em amarelo na imagem)
  • Identificador HEAD@{n}, onde "n" representa o número de movimentos atrás no histórico. Por exemplo, HEAD@{2} refere-se ao estado de duas alterações atrás.

Usamos esses identificadores para recuperar branchs, acessar um commit antigo, desfazer um reset ou obter informações específicas do projeto:

git reset --hard
Recuperar commits antigos - Isso irá desfazer todas as alterações atuais do projeto.

git checkout -b new-branch
Criar uma nova branch a partir de um commit anterior identificado no reflog.

git diff master master@{yesterday}
Mostrar todas as alterações na branch master do dia anterior.

git checkout bugfix@{2.days.ago}
Visualizar como a branch bugfix estava a 2 dias atrás.

Para saber mais, confira a documentação do git reflog.