git reflog
git reflog: exibe o log de referências, mostrando as atualizações da ponta das branches e de outras referências.
O Git registra no reflog cada movimento do HEAD e das suas branches, então esse comando é o jeito mais rápido de ver para onde uma referência apontava antes e resgatar um commit que já não pertence a nenhuma branch óbvia. Esse log existe só no seu computador, o que o torna perfeito para desfazer erros no seu repositório clonado atual sem afetar ninguém da equipe nem outros colaboradores do projeto.
Exemplo
git refloga7f3c9b (HEAD -> feature/api-refactor) HEAD@{0}: commit: Add error handling middleware
b12ad6f HEAD@{1}: commit: Refactor API routes and controllers
e93b4c2 HEAD@{2}: rebase -i (finish): returning to refs/heads/feature/api-refactor
e93b4c2 HEAD@{3}: rebase -i (pick): Clean up old utility functions
a57de29 HEAD@{4}: checkout: moving from main to feature/api-refactor
c1a9f3b (tag: v1.4.2, origin/main, main) HEAD@{5}: merge feature/dashboard: Merge made by the 'ort' strategy.
5b8f021 HEAD@{6}: commit: Update CHANGELOG and bump version
0cf2a11 HEAD@{7}: tag: v1.4.2: tagging version 1.4.2 release
fd61b7b HEAD@{8}: commit: Fix dashboard layout issues on Safari
a28c90c HEAD@{9}: checkout: moving from hotfix/security-patch to main
f4e35ad (hotfix/security-patch) HEAD@{10}: commit: Patch XSS vulnerability in comments
9e0cd43 HEAD@{11}: checkout: moving from main to hotfix/security-patch
a28c90c HEAD@{12}: pull origin main: Fast-forward
f01d1a2 HEAD@{13}: commit: Improve documentation for API usage
e712d8e HEAD@{14}: reset: moving to HEAD~1
f8d7a1b HEAD@{15}: commit (amend): Update README.md with new badges
b19d2aa HEAD@{16}: commit: Add README.md
eac51bb (tag: v1.4.1) HEAD@{17}: checkout: moving from feature/login to main
b9d0f4c HEAD@{18}: commit: Fix login redirect loop
fa8c121 HEAD@{19}: checkout: moving from main to feature/login
a28c90c HEAD@{20}: merge origin/main: Fast-forward
A lista está em ordem cronológica inversa, com a ação mais recente no topo. Vamos destrinchar as primeiras entradas:
- Hash do commit para o qual o HEAD apontava depois dessa ação (
a7f3c9b,b12ad6f, etc.) - Nomes de refs opcionais de branches ou tags que apontam para esse commit no momento (
feature/api-refactor,main,v1.4.2, etc.) - Referência do reflog — o identificador numerado (por exemplo,
HEAD@0,HEAD@1) que você pode usar para voltar exatamente a esse ponto do histórico doHEAD. - Descrição da ação — uma nota curta descrevendo a operação que moveu o
HEADaté esse commit (por exemplo,commit,checkout,merge,rebase (finish), etc.)
Exemplos
Liste o histórico recente de movimentos do HEAD no repositório:
git reflogResete a branch atual para o estado em que ela estava 2 movimentos atrás, usando a referência do reflog:
git reset --hard HEAD@{2}Resete a branch atual para o estado em que a branch main estava em um momento específico (desde que o reflog tenha uma entrada para esse momento, como yesterday, ou seja, ontem):
git reset --hard main@{yesterday}.gitignoregit checkoutgit configgit taggit worktree