El reflog: tu red de seguridad
Git registra cada movimiento de HEAD en el reflog — resets, checkouts, rebases, amends, merges. Incluso commits a los que ningún branch apunta se mantienen alcanzables durante ~90 días.
Inspeccionar el reflog
git reflog
git reflog show feature/login
git log -g
Recuperar un branch eliminado
git reflog | grep checkout
git checkout -b recovered <sha>
Deshacer un mal reset
git reset --hard HEAD~5
git reflog
git reset --hard HEAD@{1}
Deshacer un mal rebase
git reflog
git reset --hard ORIG_HEAD
Recuperar un commit enmendado
git commit --amend
git reflog
git reset --hard HEAD@{1}
Encontrar commits huérfanos
git fsck --lost-found
git fsck --no-reflog | grep "dangling commit"
Reflog vs stash
git fsck --no-reflog | awk '/dangling commit/ {print $3}'
git stash apply <sha>
Configurar expiración del reflog
git config gc.reflogExpire 180.days
git config gc.reflogExpireUnreachable 90.days