Sinossi
git rebase [-i] [--onto <newbase>] [<upstream> [<branch>]]
Descrizione
Il comando git rebase sposta una sequenza di commit a una nuova base. Riscrive la storia rieseguendo ogni commit sopra la nuova base, producendo una catena lineare invece di un merge commit. Il rebasing è prezioso per mantenere aggiornati i feature branch, pulire la storia locale prima di pushare e squashare commit fixup.
Poiché il rebasing crea nuovi commit con SHA diversi, non rebasare mai commit che sono stati pubblicati e tirati da altri — finiranno con storie divergenti. La modalità interattiva (-i) ti permette di riordinare, modificare, squashare, eliminare o correggere i commit.
Nell'uso quotidiano, git rebase si integra con alias, editor e CI.
Capire il modello dati di Git aiuta a prevedere i risultati.
Opzioni comuni
| Opzione | Descrizione |
|---|---|
-i, --interactive | Apre un editor per manipolare la lista dei commit. |
--onto <newbase> | Rebasa su un commit arbitrario, non l'upstream. |
--continue | Riprende dopo aver risolto i conflitti. |
--abort | Cancella il rebase e torna allo stato originale. |
--skip | Salta la patch corrente e continua. |
--autosquash | Ordina automaticamente i commit fixup/squash. |
--autostash | Fa stash delle modifiche locali prima del rebase e fa pop dopo. |
-r, --rebase-merges | Preserva i merge commit durante il rebase. |
Esempi
git rebase main
# Riesegue i commit del branch corrente sopra main
git rebase -i HEAD~5
# Modifica interattivamente gli ultimi 5 commit
git rebase --onto main feature-base feature-tip
# Sposta solo i commit tra feature-base e feature-tip su main
git rebase --continue
# Riprende dopo aver corretto i conflitti
Errori comuni
Fare rebase di branch pubblici e condivisi rompe la storia di ogni collaboratore. Riserva il rebase per la pulizia locale. Durante la risoluzione dei conflitti, i principianti spesso eseguono git commit invece di git rebase --continue, lasciando il rebase in uno stato rotto. Se ti perdi a metà rebase, git rebase --abort ti riporta sempre al sicuro.
Comandi correlati
git merge, git cherry-pick, git reflog, git pull --rebase