Il comando Git merge in Git


Lezione 42 / 53

Il comando Git merge in Git

Di Luca Ferretti


git guida git guida git italiano

Il comando git merge in Git serve a combinare più sequenze di commit in una cronologia unificata. Nei casi d’uso più frequenti, git merge viene utilizzato per combinare due branch.

Abitualmente, specie per chi utilizza piattaforme come GitHub o GitLab per come server per lo sviluppo condiviso, le operazioni di merge vengono effettuate direttamente dalla piattaforma sul repository remoto nel momento in cui le modifiche a una pull/merge request vengono approvate e incluse nel branch principale.

È comunque utile conoscere i meccanismi base del merge, visto che si tratta di un processo essenziale in Git. In particolare è importante considerare che:

  • in Git l’operazione di merge combina sequenze di commit in una singola sequenza di commit unificata
  • esistono due modi in cui viene effettuato il merge: Fast Forward e Three Way
  • Git è in grado di completare automaticamente il merge se non ci sono conflitti tra le sequenze di commit

Prima di procedere a un merge, è opportuno eseguire alcuni step preparatori per essere sicuri che l’operazione proceda senza problemi, specie se si sta per eseguire localmente il merge di branch remoti:

  • individuare i due branch che si vogliono mergiare, quello che riceverà modifiche (per esempio. main) e quello che si vuole unire (per esempio new-feature)
  • fare fetch e pull sui tali branch delle rispettive modifiche remote
  • fare checkout nella working copy locale del branch che riceverà le modifiche

Si potrà, quindi, far partire il merge tramite il comando git merge <branch-to-be-merged>.

L’effettiva modalità e risultato del merge dipende dallo rispettivo stato dei due branch.
 

Fast Forward Merge in Git
 

git checkout -b new-feature main

git add <file>
git commit -m "Start a feature"
git add <file>
git commit -m "Finish a feature"

git checkout main
git merge new-feature

 

 

Fast Forward Merge

Fast Forward Merge

 

Un merge fast-forward in Git può verificarsi quando è presente un percorso lineare dall’ HEAD del ramo da unire all’ HEAD del ramo di destinazione. In questo caso, Git non effettua un vero merge, ma semplicemente sposta la HEAD del ramo di destinazione alla HEAD del ramo da unire.

Le due history sono state effettivamente combinate, ma la history del nostro branch new-feature era, per così dire, il normale avanzare della history del branch main.

Three Way Merge in Git
 

git branch new-feature

git add <file>
git commit -m "Fix a bug"

git checkout new-feature

git add <file>
git commit -m "Start a feature"
git add <file>
git commit -m "Finish a feature"

git checkout main
git merge new-feature

 

 

Three Way Merge

Three Way Merge

 

Nel caso in cui i branch siano divergenti, Git deve combinare le due history attraverso un three-way merge. In questa modalità viene usato un tipo di commit dedicato, il merge commit per unire insieme le due history.

I commit di merge sono unici rispetto agli altri commit, poiché hanno due commit genitore. Nel creare un commit di merge, Git tenterà di unire automaticamente le cronologie separate. Se Git riscontra che la stessa parte di file è stata cambiata in entrambe le cronologia, non sarà in grado di combinarle automaticamente. Questo scenario è un conflitto di controllo della versione e Git richiederà l’intervento dell’utente per continuare.
Il nome “three way” indica che a Git servono tre commit per capire come realizzare il merge: i due commit HEAD dei due branch e il rispettivo genitore comune.

Guida Git in italiano 1 Che cos'è Git? 2 Nascita di Git 3 Principali caratteristiche di Git 4 Riga di comando e UI in Git 5 Come Installare Git 6 5 comandi Git per sviluppatori singoli 7 5 comandi Git per sviluppare collaborando 8 Repository in Git 9 Commit in Git 10 Working Copy in Git 11 Staging Area in Git 12 Branch in Git 13 Remote in Git 14 Inizializzare un nuovo repository con git init 15 Creare una copia di un repository remoto in Git con git clone 16 Configurare le opzioni di Git con git config 17 Il comando Git add in Git 18 Il comando Git commit in Git 19 Il comando Git diff in Git 20 Il comando Git stash in Git 21 .gitignore : i file ignored in Git 22 Il comando Git status in Git 23 il comando Git log in Git 24 Il comando Git tag in Git 25 Il comando Git blame in Git 26 Il comando Git checkout in Git 27 Il comando Git revert in Git 28 Il comando Git reset in Git 29 Il comando Git rm in Git 30 L'opzione Git commit –amend in Git 31 Git rebase –interactive in Git 32 Scorciatoie per comandi frequenti in Git 33 Repository condiviso in Git 34 Il modello Fork & pull 35 Il comando Git remote in Git 36 I principali repository remote di Git: Github, Gitlab e Bitbucket 37 Il comando Git fetch in Git 38 Il comando Git push in Git 39 Il comando Git pull in Git 40 Il comando Git branch in Git 41 Il comando Git checkout in Git 42 Il comando Git merge in Git 43 Risolvere un merge conflict in Git 44 Capire meglio il contenuto dei commit durante un conflitto di merge in Git 45 Workflow Git centralizzato 46 Workflow Git feature branching 47 Workflow Git trunk-based 48 Approccio “forking” in Git 49 Gitflow in Git 50 Messaggi di commit in Git 51 Tagging & Versioning in Git 52 L’opzione merge in Git 53 L’opzione rebase in Git
Scopri i corsi

Le nostre guide possono essere molto utili per muovere i primi passi nel mondo della programmazione, ma se vuoi iniziare una nuova carriera in ambito digital & tech con il supporto costante dei docenti e tantissime esercitazioni pratiche, ti consigliamo di frequentare uno dei corsi della nostra Hackademy!

Scopri i corsi