Comment résoudre les conflits de fusion dans Git ?
Essayez : git mergetool
Il ouvre une interface graphique qui vous guide à travers chaque conflit, et vous pouvez choisir comment fusionner. Parfois, cela nécessite un peu d'édition manuelle par la suite, mais en général, cela se suffit à lui-même. C'est certainement beaucoup mieux que de faire tout cela à la main.
Comme pour le commentaire de @JoshGlover :
La commande n'ouvre pas nécessairement une interface graphique à moins que vous n'en installiez une. L'exécution de git mergetool
pour moi a eu pour résultat l'utilisation de vimdiff
. Vous pouvez installer l'un des outils suivants pour l'utiliser à la place : meld
, opendiff
, kdiff3
, tkdiff
, xxdiff
, tortoisemerge
, gvimdiff
, diffuse
, ecmerge
, p4merge
, araxis
, vimdiff
, emerge
.
Voici un exemple de procédure pour utiliser vimdiff
pour résoudre les conflits de fusion. Basé sur [ce lien][1]
Etape 1 : Exécutez les commandes suivantes dans votre terminal
git config merge.tool vimdiff
git config merge.conflictstyle diff3
git config mergetool.prompt false
Cela fera de vimdiff l'outil de fusion par défaut.
Etape 2 : Exécutez la commande suivante dans le terminal
git mergetool
Etape 3 : Vous verrez un affichage de vimdiff dans le format suivant
╔═══════╦══════╦════════╗
║ ║ ║ ║
║ LOCAL ║ BASE ║ REMOTE ║
║ ║ ║ ║
╠═══════╩══════╩════════╣
║ ║
║ MERGED ║
║ ║
╚═══════════════════════╝
Ces 4 vues sont
LOCAL - il s'agit du fichier de la branche actuelle
BASE - ancêtre commun, comment était le fichier avant les deux changements.
REMOTE - fichier que vous fusionnez dans votre branche.
MERGED - résultat de la fusion, c'est ce qui est sauvegardé dans le repo
Vous pouvez naviguer entre ces vues en utilisant ctrl+w. Vous pouvez atteindre directement la vue MERGED en utilisant ctrl+w suivi de j.
Plus d'informations sur la navigation dans vimdiff [ici][2] et [ici][3].
Étape 4. Vous pouvez modifier la vue MERGED de la manière suivante
Si vous voulez obtenir les modifications de REMOTE
:diffg RE
Si vous voulez obtenir des changements de BASE
:diffg BA
Si vous voulez obtenir les changements de LOCAL
:diffg LO
Etape 5. Sauvegarder, quitter, valider et nettoyer
:wqa
sauvegarder et sortir de vi
git commit -m "message"
git clean
Supprime les fichiers supplémentaires (par exemple *.orig) créés par l'outil diff.
[1] : http://www.rosipov.com/blog/use-vimdiff-as-git-mergetool/#fromHistor [2] : https://stackoverflow.com/questions/4556184/vim-move-window-left-right [3] : https://stackoverflow.com/questions/27151456/how-do-i-jump-to-the-next-prev-diff-in-git-difftool
Identifiez les fichiers qui sont en conflit (Git devrait vous le dire).
Ouvrez chaque fichier et examinez les diffs ; Git les délimite. Avec un peu de chance, il sera évident de savoir quelle version de chaque bloc il faut conserver. Vous devrez peut-être en discuter avec les autres développeurs qui ont commis le code.
Une fois que vous avez résolu le conflit dans un fichier git add the_file
.
Une fois que vous avez résolu tous les conflits, faites git rebase --continue
ou n'importe quelle commande que
Git vous a dit de faire quand vous avez terminé.
Si vous faites souvent de petits commits, alors commencez par regarder les commentaires des commits avec git log --merge
. Ensuite, git diff
vous montrera les conflits.
Pour les conflits qui impliquent plus de quelques lignes, il est plus facile de voir ce qui se passe dans un outil GUI externe. J'aime opendiff -- Git supporte également vimdiff, gvimdiff, kdiff3, tkdiff, meld, xxdiff, emerge en sortie de boîte et vous pouvez en installer d'autres : git config merge.tool "your.tool"
définira l'outil de votre choix et ensuite git mergetool
après une fusion ratée vous montrera les différences dans le contexte.
Chaque fois que vous modifiez un fichier pour résoudre un conflit, git add filename
mettra à jour l'index et votre diff ne le montrera plus. Lorsque tous les conflits sont gérés et que leurs fichiers ont été git add
, git commit
terminera votre fusion.