Para, respira, no hagas push
La primera regla de los desastres de Git: no lo empeores. La mayoría de los "desastres" son recuperables porque Git es conservador.
Snapshot antes de recuperar
git tag panic-snapshot
cp -r .git ~/git-backup-$(date +%s)
Desastres comunes y arreglos
Mal reset
git reflog
git reset --hard HEAD@{1}
Mal rebase
git reflog
git reset --hard ORIG_HEAD
Branch eliminado
git reflog --all
git branch recovered <sha>
Force-push sobre un compañero
git push --force-with-lease <their-branch-tip>
Secretos commiteados
git filter-repo --replace-text passwords.txt
git push --force --all
git push --force --tags
HEAD desacoplado con nuevos commits
git checkout main
git branch rescued <sha>
Repo corrupto
git fsck --full
git unpack-objects < .git/objects/pack/pack-XXX.pack
Cheat sheet del reflog
git reflog
git reflog show feature/x
git log -g
git fsck --lost-found
Evitar repeticiones
- Usa
--force-with-leaseen lugar de--force. - Configura
pull.ff = only. - Configura expiración larga del reflog:
git config gc.reflogExpire 365.days. - Pushea branches feature como backups.
- Ejecuta
gitleaksen pre-commit y CI.
Practicar la recuperación
La mejor preparación es un simulacro deliberado de desastre.