Fermati, respira, non pushare
La prima regola dei disastri Git: non peggiorare la situazione. La maggior parte dei "disastri" sono recuperabili.
Snapshot prima del recupero
git tag panic-snapshot
cp -r .git ~/git-backup-$(date +%s)
Disastri comuni e fix
Reset cattivo
git reflog
git reset --hard HEAD@{1}
Rebase cattivo
git reflog
git reset --hard ORIG_HEAD
Branch eliminato
git reflog --all
git branch recovered <sha>
Force-push sopra un compagno
git push --force-with-lease <their-branch-tip>
Segreti committati
git filter-repo --replace-text passwords.txt
git push --force --all
git push --force --tags
Detached HEAD con nuovi commit
git checkout main
git branch rescued <sha>
Repo corrotto
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
Evitare ripetizioni
- Usare
--force-with-leaseinvece di--force. - Impostare
pull.ff = only. - Configurare scadenza reflog lunga.
- Pushare branch di feature come backup.
- Eseguire
gitleaks.
Praticare il recupero
La migliore preparazione e un'esercitazione di disastro deliberata.