Dopo aver separato git branch, al fine di testare delle modifiche, potete servirvi del comando git merge per riunire nuo­va­men­te i rami in uno. Git vi mette a di­spo­si­zio­ne due diversi metodi, fast-forward merge e three-way merge.

Registra il tuo dominio
  • Domain Connect gratuito per una con­fi­gu­ra­zio­ne facile del DNS
  • Cer­ti­fi­ca­to SSL Wildcard gratuito
  • Pro­te­zio­ne privacy inclusa

Che cos’è git merge?

Lavorare a un progetto su Git offre molte libertà. A questo proposito, è in­dif­fe­ren­te se siete gli unici re­spon­sa­bi­li dello sviluppo o se lavorate in un grande team re­spon­sa­bi­le per i dif­fe­ren­ti aspetti del progetto. Uti­liz­zan­do i rami Git (git branches) potete lavorare alla ri­so­lu­zio­ne di problemi e spe­ri­men­ta­re nuovi approcci. Anche nel caso in cui qualcosa dovesse andare storto, il vostro lavoro su di un ramo Git non avrà alcuna ri­per­cus­sio­ne immediata sul ramo prin­ci­pa­le. Potete creare percorsi di sviluppo in­di­pen­den­ti col comando Git git branch e muovervi tra le singole ra­mi­fi­ca­zio­ni con git checkout.

Se, una volta concluso il vostro lavoro, de­si­de­ra­te riunire le singole tracce di sviluppo, potete uti­liz­za­re git merge. Git merge ri­con­giun­ge due distinti branches in uno e fa sì che le modifiche possano essere apportate. A questo scopo i singoli percorsi di sviluppo vengono ge­ne­ral­men­te rein­te­gra­ti nel ramo prin­ci­pa­le.

Sintassi di git merge

Git offre due pos­si­bi­li­tà per eseguire git merge: una è fast-forward merge, l’altra è three-way merge. Di seguito vi mostriamo come queste due procedure si di­stin­guo­no 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. </branch>

Riunire i rami in Git

La soluzione più facile per riunire due rami di Git è fast-forward merge. Se questa opzione non è di­spo­ni­bi­le, potete eseguire three-way merge.

Fast-forward merge

Fast-forward merge viene eseguito quando è presente una con­nes­sio­ne lineare tra il ramo corrente e quello che intendete riunire. Un caso esem­pli­fi­ca­ti­vo può essere quando create e apportate modifiche a un nuovo ramo mentre il prin­ci­pa­le rimane inal­te­ra­to. In questo caso Git intende il lavoro svolto come una pro­se­cu­zio­ne 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 in­nan­zi­tut­to al ramo master, in seguito eseguite git merge con il ramo se­con­da­rio “ra­mo­di­la­vo­ro”, grazie al quale riunite i due rami, e infine eliminate il ramo se­con­da­rio, ormai superfluo, col comando “git branch -d”.

Three-way merge

Eseguire fast-forward merge non è possibile nel caso in cui nessuno dei due rami cor­ri­spon­da più a quello originale. Dunque, qualora abbiate deciso di dividere un ramo se­con­da­rio per poterci lavorare, e nel frattempo siano state apportate delle modifiche al ramo prin­ci­pa­le, siete costretti a eseguire three-way merge. Si parla di “fusione a tre”, in quanto tre sono i commit: ramo prin­ci­pa­le, ramo se­con­da­rio e il ramo ori­gi­na­rio 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 ef­fet­tua­te modifiche al ramo master e al ramo se­con­da­rio, di fatto rendendo im­pos­si­bi­le eseguire fast-forward merge. Questa si­tua­zio­ne ricorre par­ti­co­lar­men­te sovente quando lavorate a un progetto in un team di grandi di­men­sio­ni.

Ri­so­lu­zio­ne 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 mo­di­fi­ca­ta esat­ta­men­te 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 in­ter­rot­ta prima che Git Merge possa essere eseguito. Avete la pos­si­bi­li­tà di risolvere il conflitto ma­nual­men­te. 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” sca­ri­ca­bi­le in PDF, potete farvi mostrare esat­ta­men­te quali file devono essere mo­di­fi­ca­ti. Questi vi vengono segnalati chia­ra­men­te come “unmerged”. Mo­di­fi­ca­te i file cor­ri­spon­den­ti, im­ple­men­ta­te­li con git add e, infine, eseguite un nuovo commit. Ora avete la pos­si­bi­li­tà di com­ple­ta­re un merge per i rami di Git in­te­res­sa­ti. A questo punto potete eliminare i git branches di cui non avete più bisogno.

Consiglio

Usufruite di de­ploy­ment au­to­ma­tiz­za­ti! Con Deploy Now di IONOS potete mettere online il vostro progetto in soli tre passaggi: git push, build e deploy. Be­ne­fi­cia­te dei vantaggi di una con­fi­gu­ra­zio­ne veloce, flussi di lavoro ot­ti­miz­za­ti e massima sca­la­bi­li­tà.

Vai al menu prin­ci­pa­le