Come risolvere i merge conflict in un repository

di Lorenzo Neri
0 commento 88 visualizzazioni

In un repository può accadere molto spesso che ci siano dei conflitti e in questo articolo scopriremo come risolvere i merge conflict che spesso causano un sacco di fastidi!

Le operazioni di merge in molti casi sono parecchio frustranti, specialmente quando sei prossimo ad una consegna imminente!

Per nostra fortuna tuttavia, esistono diversi sistemi per porre rimedio ai merge conflict! Cerchiamo di capire assieme con quanto meno tecnichese possibile come fare! 😀

Mergetool: una soluzione a tutto tondo

Tra i vari comandi che mette a disposizione GIT c’è qualcosa di magico: “git mergetool”.

Questo comando apre una GUI che ti accompagna passo-passo nella risoluzione di tutti i conflitti che intendi affrontare. Non solo: ti permette di scegliere come eseguire il merge.

Una figata cosmica insomma! 😀

Passo 1: configuriamo mergetool

Se non hai mai usato mergetool, è necessario eseguire la configurazione dello stesso nella cartella del tuo repository locale. Hai disposizione diversi pacchetti per eseguire la configurazione, ma in questo caso useremo “vimdiff”. Perciò:

git config merge.tool vimdiff
git config merge.conflictstyle diff3
git config mergetool.prompt false

Questi tre comandi insomma servono a configurare “vimdiff” come pacchetto default per poi utilizzare mergetool.

Passo 2: eseguire mergetool

Ovviamente questo step è autoesplicativo:

git mergetool

Eseguendo il comando qua sopra, possono succedere due cose. O la finestra terminale vi dice “No files need merging” ma dubito sia il vostro caso non sareste qui, oppure vi apparirà quanto segue:

  ╔════════╦══════╦════════╗
  ║        ║      ║        ║
  ║ LOCALE ║ BASE ║ REMOTO ║
  ║        ║      ║        ║
  ╠════════╩══════╩════════╣
  ║                        ║
  ║        MERGIATO        ║
  ║                        ║
  ╚════════════════════════╝

Mergetool: come funziona e come risolve i merge conflict

I riquadri che state vedendo hanno il seguente significato:

  • LOCALE: è il branch corrente
  • BASE: è l’antenato comune, ovvero come sono i file prima di entrambi i cambiamenti
  • REMOTO: i file che stai mergiando nel tuo branch
  • MERGIATO: il risultato del merge, questo è ciò che verrà salvato nel repository

Per navigare in questa vista, puoi usare la combinazione di tasti “CTRL + W”.

Ora, cerchiamo di capire come muoverci.

Per modificare ciò che è stato mergiato abbiamo le seguenti possibilità.

Applicare i cambiamenti da REMOTO:

:diffig RE

Applicare i cambiamenti da BASE:

:diffig BA

Applicare i cambiamenti da LOCALE:

:diffig LO

In base a ciò che ritieni opportuno per il tuo risolvere il merge conflict nel tuo repository, per applicare i cambiamenti che hai fatto una volta presa la decisione:

:wqa
git commit -m "messaggio che intendi scrivere"
git clean

Rispettivamente, questi tre comandi eseguono il salvataggio, il commit risolutivo e infine rimuovono file non necessari generati da diff tool.

Potrebbero interessarti

Lascia un commento

Questo sito potrebbe fare uso di cookie e siccome l'UE mi obbliga a fartelo presente, eccoti il classico banner dove puoi decidere come gestirli. Accetta Leggi di più