Da Anonimo (non verificato) , 29 Aprile 2026

Cosa otterrai

Romperai deliberatamente un rebase, poi recupererai usando il reflog e ORIG_HEAD.

Setup: un sandbox con commit reali

mkdir rebase-recovery && cd rebase-recovery
git init
for i in 1 2 3 4 5; do
  echo "$i" > file.txt
  git add . && git commit -m "Commit $i"
done
git log --oneline

Disastro 1: commit accidentalmente droppati

git rebase -i HEAD~4
git log --oneline

Recupero 1: ORIG_HEAD

git reset --hard ORIG_HEAD
git log --oneline

Disastro 2: risoluzione conflitti rebase andata male

git checkout -b feature HEAD~2
echo "feature change" >> file.txt
git commit -am "Feature change"
git rebase main

Recupero 2: reflog

git reflog
git reset --hard HEAD@{3}

Disastro 3: rebase, poi piu lavoro, poi realizzato che il rebase era sbagliato

git reflog
git reset --hard <sha-before-rebase>
git branch save-work HEAD~2..HEAD
git reset --hard <sha-before-rebase>
git cherry-pick save-work
git branch -D save-work

Disastro 4: force-push del rebase cattivo

git reflog
git reset --hard <good-sha>
git push --force-with-lease

Disastro 5: rebase ha mangiato il genitore sbagliato

git reset --hard ORIG_HEAD
git rebase main

Prevenire futuri disastri

Fare un branch di backup prima di operazioni rischiose

git branch backup-before-rebase
git rebase -i HEAD~10
git reset --hard backup-before-rebase
git branch -D backup-before-rebase

Aumentare la scadenza reflog

git config gc.reflogExpire 365.days
git config gc.reflogExpireUnreachable 90.days

Pushare prima del rebase

git push backup HEAD:my-branch-backup
git rebase ...

Abilitare rerere

git config --global rerere.enabled true