Git merge: riunire facilmente i rami
Dopo aver separato git branch, al fine di testare delle modifiche, potete servirvi del comando git merge per riunire nuovamente i rami in uno. Git vi mette a disposizione due diversi metodi, fast-forward merge e three-way merge.
- Certificato SSL Wildcard incluso
- Registrazione di dominio sicura
- Indirizzo e-mail professionale da 2 GB
Che cos’è git merge?
Lavorare a un progetto su Git offre molte libertà. A questo proposito, è indifferente se siete gli unici responsabili dello sviluppo o se lavorate in un grande team responsabile per i differenti aspetti del progetto. Utilizzando i rami Git (git branches) potete lavorare alla risoluzione di problemi e sperimentare nuovi approcci. Anche nel caso in cui qualcosa dovesse andare storto, il vostro lavoro su di un ramo Git non avrà alcuna ripercussione immediata sul ramo principale. Potete creare percorsi di sviluppo indipendenti col comando Git git branch e muovervi tra le singole ramificazioni con git checkout.
Se, una volta concluso il vostro lavoro, desiderate riunire le singole tracce di sviluppo, potete utilizzare git merge. Git merge ricongiunge due distinti branches in uno e fa sì che le modifiche possano essere apportate. A questo scopo i singoli percorsi di sviluppo vengono generalmente reintegrati nel ramo principale.
Sintassi di git merge
Git offre due possibilità per eseguire git merge: una è fast-forward merge, l’altra è three-way merge. Di seguito vi mostriamo come queste due procedure si distinguono tra loro. Tuttavia, la sintassi base di git merge per i rami è sempre la medesima e si presenta così:
git merge <branch></branch>
Il ramo inserito in “<branch>” viene integrato nel ramo corrente.
Riunire i rami in Git
La soluzione più facile per riunire due rami di Git è fast-forward merge. Se questa opzione non è disponibile, potete eseguire three-way merge.
Fast-forward merge
Fast-forward merge viene eseguito quando è presente una connessione lineare tra il ramo corrente e quello che intendete riunire. Un caso esemplificativo può essere quando create e apportate modifiche a un nuovo ramo mentre il principale rimane inalterato. In questo caso Git intende il lavoro svolto come una prosecuzione del ramo master e riunisce il tutto, incluse le modifiche, all’interno di un commit. Il comando di cui avete bisogno in questo caso è:
git checkout master
git merge ramodilavoro
git branch -d ramodilavoro
Nell’esempio sopra riportato passate innanzitutto al ramo master, in seguito eseguite git merge con il ramo secondario “ramodilavoro”, grazie al quale riunite i due rami, e infine eliminate il ramo secondario, ormai superfluo, col comando “git branch -d”.
Three-way merge
Eseguire fast-forward merge non è possibile nel caso in cui nessuno dei due rami corrisponda più a quello originale. Dunque, qualora abbiate deciso di dividere un ramo secondario per poterci lavorare, e nel frattempo siano state apportate delle modifiche al ramo principale, siete costretti a eseguire three-way merge. Si parla di “fusione a tre”, in quanto tre sono i commit: ramo principale, ramo secondario e il ramo originario a cui sono state apportate le modifiche. Nell’esempio seguente potete vedere che aspetto ha un git merge di questo tipo con tre punti di partenza:
git checkout -b nuova-funzionalità master
git add file
git commit -m "Modifiche al progetto"
git add secondofile
git commit -m "Termine delle modifiche"
git checkout master
git add terzofile
git commit -m "Applicazione delle modifiche al ramo master"
git merge nuova-funzionalità
git branch -d nuova-funzionalità
In questo esempio sono state effettuate modifiche al ramo master e al ramo secondario, di fatto rendendo impossibile eseguire fast-forward merge. Questa situazione ricorre particolarmente sovente quando lavorate a un progetto in un team di grandi dimensioni.
Risoluzione dei conflitti per git merge
Provare a eseguire un merge di due rami di Git può talvolta portare a un conflitto molto esteso. Infatti, quando in due distinti rami è stata modificata esattamente la stessa parte di un file, Git non è più in grado di decidere quale delle due versioni debba essere usata. Quando questo accade, la procedura viene interrotta prima che Git Merge possa essere eseguito. Avete la possibilità di risolvere il conflitto manualmente. Il messaggio che compare in questo caso è:
CONFLICT (content): Merge conflict in <file></file>
Automatic merge failed; fix conflicts and then commit the result.
Tramite il comando git status, che trovate nella nostra guida “Git Cheat Sheet” scaricabile in PDF, potete farvi mostrare esattamente quali file devono essere modificati. Questi vi vengono segnalati chiaramente come “unmerged”. Modificate i file corrispondenti, implementateli con git add e, infine, eseguite un nuovo commit. Ora avete la possibilità di completare un merge per i rami di Git interessati. A questo punto potete eliminare i git branches di cui non avete più bisogno.
Usufruite di deployment automatizzati! Con Deploy Now di IONOS potete mettere online il vostro progetto in soli tre passaggi: git push, build e deploy. Beneficiate dei vantaggi di una configurazione veloce, flussi di lavoro ottimizzati e massima scalabilità.