Da Anonimo (non verificato) , 29 Aprile 2026

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

OpzioneDescrizione
-iEditor interattivo per il piano di rebase.
--autosquashAuto-dispone commit fixup/squash.
--rootRebasa dal primissimo commit.
-x <cmd>Esegue un comando tra i commit (es. test).
-r, --rebase-mergesPreserva i merge commit.
--continueRiprende dopo aver risolto.
--abortCancella 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