Arrêtez, respirez, ne pushez pas
La première règle des désastres Git : ne l'aggravez pas. La plupart des "désastres" sont récupérables car Git est conservateur.
Snapshot avant récupération
git tag panic-snapshot
cp -r .git ~/git-backup-$(date +%s)
Désastres courants et corrections
Mauvais reset
git reflog
git reset --hard HEAD@{1}
Mauvais rebase
git reflog
git reset --hard ORIG_HEAD
Branche supprimée
git reflog --all
git branch recovered <sha>
Force-push sur un coéquipier
git push --force-with-lease <their-branch-tip>
Secrets commités
git filter-repo --replace-text passwords.txt
git push --force --all
git push --force --tags
Detached HEAD avec nouveaux commits
git checkout main
git branch rescued <sha>
Repo corrompu
git fsck --full
git unpack-objects < .git/objects/pack/pack-XXX.pack
Cheat sheet du reflog
git reflog
git reflog show feature/x
git log -g
git fsck --lost-found
Éviter les répétitions
- Utilisez
--force-with-leaseau lieu de--force. - Configurez
pull.ff = only. - Configurez une longue expiration du reflog.
- Pushez les branches feature en backup.
- Lancez
gitleaksen pre-commit et CI.
Pratiquer la récupération
La meilleure préparation est un exercice délibéré de désastre.