Altro
Come risolvere i conflitti di fusione in Git
Come si risolvono i conflitti di fusione in Git?
4577
3
Come si risolvono i conflitti di fusione in Git?
Prova:
git mergetool
.Apre una GUI che ti guida attraverso ogni conflitto, e puoi scegliere come unire. A volte richiede un po' di editing a mano dopo, ma di solito è sufficiente da solo. È molto meglio che fare tutto a mano, certamente.
Come da commento di @JoshGlover:
Il comando non apre necessariamente una GUI a meno che tu non ne installi una. L'esecuzione di
git mergetool
per me ha portato all'utilizzo divimdiff
. Puoi installare uno dei seguenti strumenti per usarlo al suo posto:meld
,opendiff
,kdiff3
,tkdiff
,xxdiff
,tortoisemerge
,gvimdiff
,diffuse
,ecmerge
,p4merge
,araxis
,vimdiff
,emerge
.Di seguito è riportata la procedura di esempio per utilizzare
vimdiff
per risolvere i conflitti di fusione. Basato su questo linkPasso 1: Esegui i seguenti comandi nel tuo terminale
Questo imposterà vimdiff come strumento di fusione predefinito.
Passo 2: Esegui il seguente comando nel terminale
Passo 3: Vedrai una visualizzazione di vimdiff nel seguente formato
Queste 4 viste sono
LOCAL - questo è il file del ramo corrente
BASE - antenato comune, come appariva il file prima di entrambe le modifiche
REMOTE - file che stai fondendo nel tuo ramo
MERGED - risultato della fusione, questo è ciò che viene salvato nel repo
Puoi navigare tra queste viste usando ctrl+w. Puoi raggiungere direttamente la vista MERGED usando ctrl+w seguito da j.
Maggiori informazioni sulla navigazione vimdiff qui e qui
Passo 4. Potreste modificare la vista MERGED nel seguente modo
Se volete ottenere le modifiche da REMOTE
Se vuoi ottenere i cambiamenti da BASE
Se vuoi ottenere le modifiche da LOCAL
Passo 5. Salva, Esci, Impegna e Pulisci
:wqa
salva ed esci da vigit commit -m "messaggio"
git clean
Rimuove i file extra (ad esempio *.orig) creati dallo strumento diff.Identificate quali file sono in conflitto (Git dovrebbe dirvelo).
Aprire ogni file ed esaminare le differenze; Git le delimita. Si spera che sia ovvio quale versione di ogni blocco mantenere. Potrebbe essere necessario discuterne con i colleghi sviluppatori che hanno commesso il codice.
Una volta che hai risolto il conflitto in un file
git add the_file
.Una volta risolti tutti i conflitti, fai
git rebase --continue
o qualsiasi comando Git ha detto di fare quando hai completato.Se stai facendo frequenti piccoli commit, allora comincia a guardare i commenti di commit con
git log --merge
. Poigit diff
ti mostrerà i conflitti.Per i conflitti che coinvolgono più di poche righe, è più facile vedere cosa sta succedendo in uno strumento grafico esterno. Mi piace opendiff -- Git supporta anche vimdiff, gvimdiff, kdiff3, tkdiff, meld, xxdiff, emerge fuori dalla scatola e puoi installarne altri:
git config merge.tool "your.tool"
imposterà lo strumento scelto e poigit mergetool
dopo un merge fallito ti mostrerà le differenze nel contesto.Ogni volta che si modifica un file per risolvere un conflitto,
git add filename
aggiornerà l'indice e il tuo diff non lo mostrerà più. Quando tutti i conflitti sono gestiti e i loro file sono statigit add
-ed,git commit
completerà il tuo merge.