Menu
Coddy logo textTech

Git Rebase vs Merge

Ultimo aggiornamento

Sia git merge sia git rebase portano il lavoro di un branch in un altro. git merge collega le due cronologie con un commit di merge, conservando esattamente ciò che è successo. git rebase riapplica i tuoi commit uno alla volta sopra l'altro branch, producendo una cronologia pulita e lineare, ma riscrivendo i tuoi commit nel processo.

La regola d'oro: non fare mai il rebase di commit che altri hanno già scaricato con pull. Provali entrambi nel terminal playground: una vera shell nel tuo browser.

merge registra un commit di unione e preserva la vera forma della cronologia; rebase riscrive i tuoi commit in una linea retta.

A confronto

Comportamentogit mergegit rebase
Forma della cronologiaRamificata, con un commit di mergeLineare
Riscrive i commitNoSì
Sicuro sui branch condivisiSìNo
Conserva la cronologia esattaSìNo
Facile capire quando è avvenuto un mergeSìPiù difficile

Sintassi

ComandoCosa fa
git merge featureUnisce feature nel branch corrente
git merge --no-ff featureCrea sempre un commit di merge
git rebase mainRiapplica i commit del branch corrente su main
git rebase -i HEAD~3Modifica in modo interattivo gli ultimi 3 commit
git rebase --abortAnnulla un rebase in corso

Domande frequenti su git rebase vs merge

Qual è la differenza tra git rebase e git merge?
git merge combina due branch creando un nuovo commit di merge che unisce le loro cronologie, mantenendo la traccia esatta di ciò che è successo. git rebase invece sposta i tuoi commit in modo che vengano riapplicati sopra un altro branch, producendo una cronologia lineare ma riscrivendo quei commit con nuovi hash. Il merge conserva la cronologia; il rebase la riscrive per renderla più pulita.
Quando conviene usare il merge e quando il rebase?
Usa il merge per integrare un branch finito (soprattutto se condiviso): è sicuro e non distruttivo. Usa il rebase per sistemare i tuoi commit locali prima di condividerli, o per aggiornare un feature branch sull'ultimo main con una cronologia pulita. Molti team fanno il rebase in locale e poi il merge in main.
Qual è la regola d'oro del rebase?
Non fare mai il rebase di commit su cui altri hanno già basato il proprio lavoro, cioè in genere tutto ciò che hai inviato su un branch condiviso. Siccome il rebase riscrive i commit, costringeresti tutti gli altri a riconciliare una cronologia divergente. Usa pure il rebase sui commit locali non ancora inviati; per tutto ciò che è già pubblico usa il merge (o il revert).
Il rebase causa meno conflitti del merge?
Nessuno dei due evita i conflitti, ma li fa emergere in modo diverso. Un merge risolve tutti i conflitti una volta sola, nel commit di merge. Un rebase può chiederti di risolverli commit per commit, man mano che ciascuno viene riapplicato. Il lavoro totale è simile; il rebase lo distribuisce.
Posso esercitarmi online?
Sì. Apri il terminal playground per eseguire git merge e git rebase in una vera shell nel tuo browser, senza installare nulla. Il corso interattivo gratuito di Git di Coddy spiega anche merge e rebase passo dopo passo.
Illustrazione dei linguaggi di programmazione di Coddy

Impara Git con Coddy

INIZIA