Perche il rebase interattivo
Il rebase interattivo riscrive una sequenza di commit in una storia piu pulita e significativa prima della pubblicazione. E lo strumento chirurgico di Git: si possono riordinare, modificare, accorpare con squash, fixare, eliminare, rinominare o dividere i commit, tutto in una singola sessione guidata.
La lista todo
Eseguire git rebase -i apre un editor con una lista todo. Ogni riga ha un verbo e un commit. Riordinare le righe per riordinare i commit.
git rebase -i HEAD~5
Verbi: pick, reword, edit, squash, fixup, drop, exec, break, e label/reset/merge per il grafo di rebase merge (da Git 2.18).
Dividere un commit
git reset HEAD^
git add -p
git commit -m "First logical change"
git add -p
git commit -m "Second logical change"
git rebase --continue
Workflow autosquash
git commit --fixup=<sha>
git rebase -i --autosquash HEAD~10
Impostare rebase.autoSquash = true e rebase.autoStash = true nella configurazione.
Exec per la verifica
git rebase -i --exec "cargo test" main
Ogni commit tra HEAD e main verra estratto e il comando eseguito.
Rebase merges con --rebase-merges
git rebase -i --rebase-merges main
Errori comuni
Fare rebase di commit pubblicati costringe i collaboratori a interventi sulla storia. Riservarlo ai branch che si possiedono. Dimenticare git rebase --continue dopo i conflitti lascia il rebase a meta. Usare git status. git reflog recupera quasi sempre il lavoro perso.
Recupero
git rebase --abort
git reflog
git reset --hard HEAD@{5}