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!
Ciao mi chiamo Lorenzo Neri e sono un informatico: realizzo contenuti per aiutare le persone a padroneggiare l’arte del nuovo millennio, ovvero l’informatica!
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.