Les conflits de fusion se produisent lorsque des modifications simultanées sont apportées à la même ligne d’un fichier, ou lorsqu’une personne modifie un fichier et qu’une autre personne supprime le même fichier. Pour plus d’informations, consultez « À propos des conflits de fusion ».
Conseil : vous pouvez utiliser l’éditeur de conflit sur GitHub pour résoudre les conflits de fusion de modifications de ligne simultanées entre les branches faisant partie d’une demande de tirage. Pour plus d’informations, consultez « Résolution d’un conflit de fusion sur GitHub ».
Conflits de fusion de modifications de ligne simultanées
Pour résoudre un conflit de fusion causé par des modifications de lignes simultanées, vous devez choisir les modifications à incorporer des différentes branches dans une nouvelle validation.
Par exemple, si vous et une autre personne avez modifié le fichier styleguide.md sur les mêmes lignes dans différentes branches du même référentiel Git, vous obtiendrez une erreur de conflit de fusion lorsque vous tentez de fusionner ces branches. Vous devez résoudre ce conflit de fusion avec une nouvelle validation avant de pouvoir fusionner ces branches.
-
Ouvrez TerminalTerminalGit Bash.
-
Accédez au référentiel Git local affecté par le conflit de fusion.
cd REPOSITORY-NAME
-
Générez une liste des fichiers affectés par le conflit de fusion. Dans cet exemple, le fichier styleguide.md présente un conflit de fusion.
$ git status > # On branch branch-b > # You have unmerged paths. > # (fix conflicts and run "git commit") > # > # Unmerged paths: > # (use "git add <file>..." to mark resolution) > # > # both modified: styleguide.md > # > no changes added to commit (use "git add" and/or "git commit -a")
-
Ouvrez votre éditeur de texte favori, par exemple Visual Studio Code, et accédez au fichier qui présente des conflits de fusion.
-
Pour voir le début du conflit de fusion dans votre fichier, recherchez marqueur de conflit
<<<<<<<
dans ce fichier. Lorsque vous ouvrez le fichier dans votre éditeur de texte, vous verrez les modifications de la branche principale ou de base après la ligne<<<<<<< HEAD
. Puis vous verrez=======
, qui isole vos modifications des changements dans l’autre branche, suivi par>>>>>>> BRANCH-NAME
. Dans cet exemple, une personne a écrit « ouvrir un problème » dans la branche de base ou HEAD, et une autre personne a écrit « poser votre question dans IRC » dans la branche de comparaison oubranch-a
.If you have questions, please <<<<<<< HEAD open an issue ======= ask your question in IRC. >>>>>>> branch-a
-
Choisissez si vous voulez garder uniquement les changements de votre branche, garder seulement les changements de l’autre branche ou faire un nouveau changement, ce qui peut incorporer des changements dans les deux branches. Supprimez les marqueurs de conflit
<<<<<<<
,=======
,>>>>>>>
et faites les changements que vous voulez dans la fusion finale. Dans cet exemple, les deux modifications sont incorporées dans la fusion finale :If you have questions, please open an issue or ask in our IRC channel if it's more urgent.
-
Ajoutez ou indexez vos modifications.
git add .
-
Validez vos modifications avec un commentaire.
git commit -m "Resolve merge conflict by incorporating both suggestions"
Vous pouvez maintenant fusionner les branches sur la ligne de commande ou envoyer vos modifications à votre référentiel distant sur GitHub et fusionner vos modifications dans une demande de tirage.
Conflits de fusion de fichiers supprimés
Pour résoudre un conflit de fusion provoqué par des modifications simultanées apportées à un fichier, où une personne supprime un fichier dans une branche et une autre personne modifie le même fichier, vous devez choisir de supprimer ou de conserver le fichier supprimé dans une nouvelle validation.
Par exemple, si vous avez modifié un fichier, tel que README.md, et qu’une autre personne a supprimé le même fichier dans un autre référentiel Git, vous obtiendrez une erreur de conflit de fusion lorsque vous tentez de fusionner ces branches. Vous devez résoudre ce conflit de fusion avec une nouvelle validation avant de pouvoir fusionner ces branches.
-
Ouvrez TerminalTerminalGit Bash.
-
Accédez au référentiel Git local affecté par le conflit de fusion.
cd REPOSITORY-NAME
-
Générez une liste des fichiers affectés par le conflit de fusion. Dans cet exemple, le fichier README.md présente un conflit de fusion.
$ git status > # On branch main > # Your branch and 'origin/main' have diverged, > # and have 1 and 2 different commits each, respectively. > # (use "git pull" to merge the remote branch into yours) > # You have unmerged paths. > # (fix conflicts and run "git commit") > # > # Unmerged paths: > # (use "git add/rm <file>..." as appropriate to mark resolution) > # > # deleted by us: README.md > # > # no changes added to commit (use "git add" and/or "git commit -a")
-
Ouvrez votre éditeur de texte favori, par exemple Visual Studio Code, et accédez au fichier qui présente des conflits de fusion.
-
Décidez si vous souhaitez conserver le fichier supprimé. Vous pouvez afficher les dernières modifications apportées au fichier supprimé dans votre éditeur de texte.
Pour ajouter le fichier supprimé à votre référentiel :
git add README.md
Pour supprimer ce fichier de votre référentiel :
$ git rm README.md > README.md: needs merge > rm 'README.md'
-
Validez vos modifications avec un commentaire.
$ git commit -m "Resolve merge conflict by keeping README.md file" > [branch-d 6f89e49] Merge branch 'branch-c' into branch-d
Vous pouvez maintenant fusionner les branches sur la ligne de commande ou envoyer vos modifications à votre référentiel distant sur GitHub et fusionner vos modifications dans une demande de tirage.