Code

Git rebase o git merge? Quale usare?

5 Luglio 2022 - 2 minuti di lettura

Entrambi i comandi git rebase e git merge hanno lo stesso obiettivo, integrare le modifiche da un branch a un altro, ciò che cambia è la modalità.

In questo breve articolo vi spiegherò la differenza tra i due comandi e in quale occasione sarebbe opportuno utilizzare git rebase anziché git merge, e viceversa.

Vi riporto un semplice esempio per capire la differenza tra i due comandi. Ipotizziamo di avere due branch: branch A (che ha i commit in giallo) e branch B (con i commit in viola).

Differenza tra git merge e git rebase

Il risultato del comando git merge del branch B sul branch A è una combinazione dei commit con un messaggio che segnala il merge. Nel caso di git rebase tutti i commit sul branch B vengono aggiunti alla fine del branch A.
Attraverso il rebasing, la radice del branch B viene portata sull’ultimo commit del branch A, riscrivendo di fatto la storia del branch B.
Nel caso del merging la storia si conserva e viene modificato solo il branch A.

Quando utilizzare git rebase? E quando git merge?

Adesso che vi ho chiarito la differenza tra git rebase e git merge vediamo quale è meglio usare. Quando si lavora da soli su un branch, utilizzare il comando git rebase potrebbe essere la scelta migliore. Nel caso di più persone che lavorano sullo stesso branch, questo comando introdurrebbe dei problemi e inconsistenze perché la storia, come scritto prima, viene riscritta a ogni rebase.

Qualora si volesse preservare la storia di ogni commit nello stesso ordine in cui è stato fatto, git merge sarebbe la scelta migliore. Doveste avere a che fare con un repository con una storia di commit complessa, fare rebasing aiuterebbe ad avere una storia più lineare e leggibile.

Git rebase o git merge?

La risposta è: dipende dal contesto. Scegliere di utilizzare sempre git rebase o git merge è sbagliato, sarebbe più opportuno scegliere uno dei due comandi tenendo conto del contesto del progetto al quale si sta lavorando.

Articolo scritto da