Git Merge
Ultimo aggiornamento
git merge porta i commit di un altro branch in quello corrente. Quando il branch corrente non si è allontanato, Git fa un fast-forward, spostando semplicemente in avanti il puntatore. Quando entrambi i branch hanno nuovi commit, Git crea un commit di merge che collega le due cronologie. A differenza del rebase, il merge conserva la cronologia esatta di entrambi i branch.
Prova questi comandi nel terminal playground: una vera shell nel tuo browser, senza installare nulla.
Sintassi
| Comando | Cosa fa |
|---|---|
git merge feature | Unisce feature nel branch corrente |
git merge --no-ff feature | Crea sempre un commit di merge |
git merge --ff-only feature | Fa il merge solo se è possibile un fast-forward |
git merge --squash feature | Combina i commit del branch in uno solo |
git merge --abort | Annulla un merge con conflitti |
Fast-forward vs commit di merge
| Scenario | Fast-forward | Commit di merge (--no-ff) |
|---|---|---|
| Crea un nuovo commit | No | Sì |
| Conserva traccia del branch | No | Sì |
| Avviene quando | Il branch corrente non si è allontanato | Entrambi i branch hanno nuovi commit |
Risolvere un conflitto di merge
Quando entrambi i branch hanno modificato le stesse righe, Git si ferma.
| Passo | Comando | Risultato |
|---|---|---|
| 1 | Modifica i file in conflitto | Scegli le righe corrette e rimuovi i marcatori |
| 2 | git add <file> | Segna il conflitto come risolto |
| 3 | git commit | Completa il merge |
Domande frequenti su git merge
Come unisco un branch in un altro con Git?
git switch main), poi esegui git merge feature. Git unisce i commit di feature in main, con un fast-forward oppure creando un commit di merge se entrambi i branch si sono allontanati.Che differenza c'è tra un fast-forward e un commit di merge?
--no-ff per creare sempre un commit di merge, oppure --ff-only per richiedere un fast-forward.Come risolvo un conflitto di merge?
<<<<<<<, ======= e >>>>>>>. Modifica ogni file per tenere il contenuto corretto e rimuovi i marcatori, poi esegui git add sui file risolti e git commit per completare il merge.Come annullo o interrompo un merge?
git reset --hard ORIG_HEAD riporta il branch alla posizione precedente al merge (a differenza di HEAD~1, funziona correttamente anche dopo un fast-forward, ma scarta il lavoro non committato). Se hai già fatto push del merge, usa git revert -m 1 <merge-hash>.Posso esercitarmi online?
git merge in una vera shell nel tuo browser, senza installare nulla. Il corso interattivo gratuito di Git di Coddy spiega anche il merge e la risoluzione dei conflitti passo dopo passo.