Taula de continguts

Git Merge

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ó.

, , , , , , , , , , , , , , , , , , , , ,

Què és un merge o fusió de branques?

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.


Comprovar els canvis

Posem que tenim la branca main i en derivem una altra branca de nom feature.

Comparar branques directament

Comprovar els canvis és senzill amb aquesta instrucció:

$ git diff main...feature

O equivalent:

$ git diff $(git merge-base main feature) feature


Alternativa: fer un merge sense commit

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:

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


Efectuar els canvis sobre la branca d'integració o main