Sinossi
git rebase -i <upstream>
git rebase -i --root
Descrizione
Il rebase interattivo apre un editor con la lista dei commit da rebasare, ognuno preceduto da un'azione: pick, reword, edit, squash, fixup, drop, exec o break. Modificando questa lista, puoi riordinare, combinare, dividere o rimuovere commit prima che vadano upstream. È il cavallo di battaglia di "pulire la storia prima di pushare".
Combinato con --autosquash, i commit fixup creati via git commit --fixup sono automaticamente disposti accanto ai loro target e marcati per lo squash. Il flag --rebase-merges preserva i merge commit durante il rebase interattivo.
Nell'uso quotidiano, git rebase -i si integra con alias e CI.
Capire il modello dati di Git aiuta a prevedere i risultati.
Opzioni comuni
| Opzione | Descrizione |
|---|---|
-i | Editor interattivo per il piano di rebase. |
--autosquash | Auto-dispone commit fixup/squash. |
--root | Rebasa dal primissimo commit. |
-x <cmd> | Esegue un comando tra i commit (es. test). |
-r, --rebase-merges | Preserva i merge commit. |
--continue | Riprende dopo aver risolto. |
--abort | Cancella completamente. |
Esempi
git rebase -i HEAD~5
# Modifica gli ultimi 5 commit
git commit --fixup abc123
git rebase -i --autosquash abc123^
# Aggiungi un fixup, poi auto-squash al rebase
git rebase -i -x "npm test" main
# Esegue test dopo ogni commit durante il rebase
git rebase -i --root
# Riscrive la storia dal primo commit
Errori comuni
Salvare una lista todo di rebase vuota aborta l'operazione — lascia almeno una riga pick. Marcare troppi commit come edit crea una sequenza tediosa di stop; preferisci squash o fixup quando vuoi solo combinare. Non fare mai rebase interattivo di commit già pushati e condivisi.
Comandi correlati
git rebase, git commit --fixup, git cherry-pick, git reflog