Da Anonimo (non verificato) , 29 Aprile 2026

Sinossi

git merge [--no-ff] [--squash] [--abort] [-s <strategy>] [<branch>]

Descrizione

Il comando git merge integra modifiche da un branch a un altro. Per default produce un commit "vero merge" con due parent, preservando la topologia di entrambe le storie. Se il branch target è un antenato stretto della sorgente, Git fa fast-forward semplicemente spostando il puntatore del branch; passa --no-ff per registrare sempre un merge commit.

Quando le stesse righe sono modificate su entrambi i lati, Git si ferma con un marker di conflitto. Risolvi manualmente, poi git add i file ed esegui git commit (o git merge --continue). Per uscire da un merge in corso, usa git merge --abort.

Nell'uso quotidiano, git merge si integra con alias, editor e CI.

Capire il modello dati di Git aiuta a prevedere i risultati.

Opzioni comuni

OpzioneDescrizione
--no-ffCrea sempre un merge commit, anche quando il fast-forward è possibile.
--ff-onlyRifiuta di mergiare a meno che il fast-forward non sia possibile.
--squashCombina la storia mergiata in un singolo commit sul branch target.
--abortAbbandona un merge in corso.
--continueRiprende un merge dopo aver risolto i conflitti.
-s <strategy>Sceglie la strategia di merge (ort, recursive, resolve, octopus).
-X <option>Passa opzione specifica della strategia (es. ours, theirs).
--no-commitMette in stage il risultato del merge ma non committa.

Esempi

git merge feature/login
# Mergia il feature branch nel branch corrente

git merge --no-ff release/1.2
# Crea sempre un merge commit (preserva la topologia)

git merge --abort
# Cancella un merge dopo che sorgono conflitti

git merge -X theirs hotfix
# Auto-risolve i conflitti preferendo il "loro" lato

Errori comuni

Risolvere conflitti in fretta e dimenticare di rimuovere i marker di conflitto (<<<<<<<) lascia codice rotto committato. Esegui sempre una build o test dopo aver risolto. Un'altra trappola è fare fast-forward silenziosamente quando volevi un merge commit per la tracciabilità — usa --no-ff. Infine, --squash NON crea un merge commit, quindi il branch sorgente non viene registrato come parent.

Comandi correlati

git rebase, git mergetool, git pull, git cherry-pick