El merge és la operació més delicada quan parlem de Git i de qualsevol VCS.
Us poso unes instruccions útils per comprovar els canvis en les branques a combinar, abans de que es barregi el codi i doni possibles conflictes.
De fet, encara que no hi hagi conflictes sempre és delicat barrejar codi, i convé revisar tots els canvis que s'estan introduint a la branca main o de integració.
En un sistema de control de versions o VCS es solen fer branques per evitar que les modificacions de diversos developers o equips interfereixin les unes amb les altres.
Es sol fer una branca per resoldre un error o bug (hotfix) o per implementar una funcionalitat (feature). Un cop resolt, es fa un merge o fusió entre la branca escindida i la branca de integració.
El moment de fusionar el codi és delicat. Pot donar conflicte (una línia en la que hi ha canvis en les 2 branques a fusionar). I si no dona conflicte, la barreja de codi pot provocar errors en funcionalitats abans resoltes.
Conclusió: sempre s'ha de revisar quins seran els canvis abans de fer el merge.
Posem que tenim la branca main i en derivem una altra branca de nom feature.
Comprovar els canvis és senzill amb aquesta instrucció:
$ git diff main...feature
O equivalent:
$ git diff $(git merge-base main feature) feature
Assegura’t d’estar a la branca destí main i que l’arbre de treball estigui net:
$ git checkout main $ git merge --no-commit --no-ff feature
Els paràmetres son:
–no-commit: no fa el commit automàtic.–no-ff: força un merge commit encara que es pogués fer fast-forward, perquè puguis veure’l.Ara inspecciona:
$ git status # veure fitxers modificats i conflictes $ git diff --cached # canvis que s'afegirien al merge commit $ git diff --cached --stat # resum de fitxers i línies $ git diff # canvis no staged (si n'hi ha)
Si hi ha conflictes, git status mostrarà Unmerged paths i git diff et mostrarà els marcadors de conflicte.
Quan ja ho hagis vist, desfés-ho tot:
$ git merge --abort
O bé, si no hi ha conflictes i vols confirmar el merge, simplement:
$ git commit