Comment résoudre les conflits de fusion dans Git (2023)

/ #Git
Comment résoudre les conflits de fusion dans Git (1)
Colade Chris
Comment résoudre les conflits de fusion dans Git (2)

Si vous avez déjà travaillé dans une équipe travaillant sur une grande base de code, vous avez probablement rencontré des conflits de fusion lors de la création d'une demande d'extraction ou de la fusion de deux branches.

Même si vous n'avez jamais travaillé avec une équipe ou sur une grande base de code, il est toujours possible d'avoir des conflits de fusion tant que vous avez plus d'une branche. Lors du processus de fusion d'une branche avec une autre, un conflit de fusion peut se produire.

Dans cet article, vous découvrirez les conflits de fusion dans Git et les types de conflits de fusion que vous pourriez rencontrer. Plus important encore, vous apprendrez à résoudre les conflits de fusion sur GitHub et avec l'éditeur de fusion à 3 voies de VS Code.

Ce que nous couvrirons

  • Qu'est-ce qu'un conflit de fusion dans Git ?
  • Que faire en cas de conflits de fusion
  • Quels sont les types de conflits de fusion dans Git ?
    • Conflit de fusion de contenu
    • Conflit de fusion structurelle
  • Comment résoudre les conflits de fusion dans Git
    • Comment résoudre les conflits de fusion dans Git avec l'interface GitHub
    • Comment résoudre les conflits de fusion dans Git avec VS Code
    • Comment résoudre les conflits de fusion dans Git avec l'éditeur de fusion à 3 voies de VS Code
  • Emballer

Qu'est-ce qu'un conflit de fusion dans Git ?

Dans Git, un conflit de fusion se produit lorsque vous ou l'un des membres de votre équipe apportez des modifications conflictuelles au même fichier à partir de deux branches différentes.

Des conflits de fusion peuvent également survenir même si vous ne travaillez pas avec des membres de l'équipe. Si vous avez apporté des modifications au même fichier à partir de différentes branches et que les modifications sont en conflit, il y aura un conflit de fusion.

À de nombreuses reprises, Git gère automatiquement la fusion pour vous. Mais si vous apportez des modifications conflictuelles au même fichier, vous devez les résoudre manuellement.

Un exemple de scénario de conflit de fusion pourrait ressembler à ceci :

  • vous travaillez en succursaleprincipalet vous apportez des modifications à la ligne 1 d'un fichier mytext.txt, disonsBonjour le monde.
  • vous passez en succursalenouvelle fonctionnalitéet vous faites un changement à la même ligne deux demontexte.txt, direBonjour la terre.

Si vous essayez de fusionner la branchenouvelle fonctionnalitépourprincipal, Git ne pourra pas décider automatiquement lequel accepter entreBonjour le mondeetBonjour la terre. Ainsi, Git déclenchera une erreur de conflit de fusion et vous demandera de résoudre manuellement le conflit.

Que faire en cas de conflits de fusion

Ce n'est pas la fin du monde si des conflits de fusion surviennent pendant que vous travaillez. Git vous dit simplement "Je veux faire cette fusion pour vous, mais vous devez d'abord faire quelque chose pour moi".

Lorsque ces conflits se produisent et que vous tentez de les résoudre, Git annotera automatiquement les lignes en conflit pour vous avec le symbole inférieur à (<), signe égal (=) et supérieur au symbole (>) comme ça:

<<<<<<< =======>>>>>>>

Comment résoudre les conflits de fusion dans Git (3)

Tout entre le plus petit que (<) et les signes égal (=) est le changement dans la branche actuelle (la branche dans laquelle vous fusionnez). Tout entre les égaux (=) et supérieur à (>) signes est le changement entrant de la branche que vous souhaitez fusionner vers une autre branche.

Il vous appartient de supprimer ces annotations et de décider comment vous voulez que les lignes en conflit soient - vous pouvez accepter l'une des modifications ou les deux.

Ainsi, au lieu de considérer les conflits de fusion comme une pierre d'achoppement, vous pouvez simplement les voir comme des annotations que vous devez supprimer et des choses que vous devez accepter ou rejeter.

Continuez à lire cet article pour voir comment résoudre un conflit de fusion. Mais avant cela, regardons les types de conflits de fusion.

Quels sont les types de conflits de fusion dans Git ?

Il existe deux types de conflits de fusion. Ils sontconflit de contenuetconflit structurel.

Conflit de fusion de contenu

Un conflit de contenu se produit lorsque les modifications que vous apportez dans deux branches différentes affectent les mêmes lignes de code dans un fichier. Cela entraîne des modifications conflictuelles qui ne peuvent pas être fusionnées automatiquement par Git.

Par exemple, vous faites le changementaffichage : flexibleà la ligne 2 dans une branche et une autre changementaligner le texte : centréà la même ligne 2 dans le même fichier dans une autre branche.

Quand celaconflit de contenuse produit, Git arrêtera le processus de fusion et vous invitera à apporter des modifications au code avant d'aller de l'avant.

Conflit de fusion structurelle

Un conflit structurel se produit lorsque les modifications que vous apportez dans deux branches différentes affectent le même fichier mais n'entrent pas en conflit ligne par ligne. Au lieu de cela, les modifications affectent la structure ou l'organisation du fichier, comme renommer une variable ou une fonction, ou déplacer un bloc de code.

Si ce conflit structurel se produit, Git ne sera pas en mesure de déterminer laquelle des modifications accepter et vous invitera à décider quelles modifications vous souhaitez.

Comment résoudre les conflits de fusion dans Git

Pour vous montrer comment résoudre les conflits de fusion, j'ai initialisé Git dans un répertoire de travail (dossier) en exécutantgit init. J'ai également créé une nouvelle branche que j'appellenouvelle fonctionnalitéen exécutantgit checkout -b nouvelle fonctionnalité.

En coursbranche gitmontre que j'ai des branchesprincipaletnouvelle fonctionnalité:

Comment résoudre les conflits de fusion dans Git (4)

J'ai également poussé les deux branches vers GitHub, afin que je puisse vous montrer comment résoudre les conflits de fusion sur GitHub :

Comment résoudre les conflits de fusion dans Git (5)

J'ai ajouté du code aux fichiers HTML et JavaScript dans le répertoire. J'ai déclenché des conflits dans les deux fichiers et effectué des commits :

Comment résoudre les conflits de fusion dans Git (6)

Comment résoudre les conflits de fusion dans Git avec l'interface GitHub

Depuis que j'ai poussé lenouvelle fonctionnalitébranche à GitHub, GitHub me demandera de créer une demande d'extraction afin que lenouvelle fonctionnalitébranche sera fusionnée avecprincipal:

Comment résoudre les conflits de fusion dans Git (7)

Dans ce cas, dès que vous cliquez sur « Comparer et tirer », vous verrez qu'il ne peut pas y avoir de fusion automatique car il y a un conflit :

Comment résoudre les conflits de fusion dans Git (8)

Cela signifie qu'il y a un conflit que vous devez résoudre. Créez la demande d'extraction et faites défiler vers le bas pour voir où vous pouvez résoudre le conflit, puis cliquez sur le bouton « Résoudre les conflits » :

Comment résoudre les conflits de fusion dans Git (9)

Lorsque vous cliquez sur "Résoudre les conflits", vous obtiendrez un éditeur, et à droite, vous verrez la liste des fichiers qui ont des conflits :

Comment résoudre les conflits de fusion dans Git (10)

Dans l'éditeur, vous verrez les lignes où les conflits se sont produits :

Comment résoudre les conflits de fusion dans Git (11)

Vous pouvez voir que les changements dans la branche entrante sont compris entre le plus petit que (<) et égal à (=), tandis que les changements dans la branche dans laquelle vous souhaitez fusionner sont entourés de plus de (>) et égal à (=) panneaux.

Choisissez la ligne souhaitée, supprimez les annotations et cliquez sur "Marquer comme résolu" dans le coin supérieur droit :

Comment résoudre les conflits de fusion dans Git (12)

Répétez le même processus pour tout autre fichier présentant également des conflits.

Si vous le souhaitez, vous pouvez conserver les deux lignes. Assurez-vous simplement de supprimer les annotations.

Après cela, cliquez sur "Commit merge" dans le coin supérieur droit :

Comment résoudre les conflits de fusion dans Git (13)

Maintenant, il ne devrait plus y avoir de conflit de fusion :

Comment résoudre les conflits de fusion dans Git (14)

Comment résoudre les conflits de fusion dans Git avec VS Code

De nombreux éditeurs de code populaires ont des interfaces pour résoudre un conflit de fusion lorsque vous essayez de fusionner localement.

Lorsque vous basculez vers la branche dans laquelle vous souhaitez fusionner et exécutezgit merge branch-to-merge, vous serez invité à résoudre certains conflits (le cas échéant). S'il y a des conflits à résoudre, l'interface ressemble à ceci dans VS Code :

Comment résoudre les conflits de fusion dans Git (15)

À ce stade, si vous n'êtes pas prêt à résoudre les conflits, vous pouvez abandonner la fusion en exécutantgit merge --abort.

Mais si vous souhaitez résoudre les conflits, vous pouvez soit accepter les modifications entrantes, soit accepter la modification actuelle, soit accepter les deux modifications.

Si vous sélectionnez l'un des trois, le ou les conflits de fusion seront résolus. Après cela, ajoutez le fichier et validez-le comme vous le feriez habituellement :

git add .git commit -m ""

Comment résoudre les conflits de fusion dans Git avec l'éditeur de fusion à 3 voies de VS Code

Vous pouvez également rebaser un conflit avec l'éditeur de fusion à 3 voies VS Code.

Après avoir courugit merge , cliquez sur le bouton "Résoudre dans l'éditeur de fusion"

Vous verrez que vous avez maintenant 3 vues. Vous verrez les modifications dans la branche entrante à droite, les modifications dans la branche dans laquelle vous souhaitez fusionner à droite (la branche actuelle) et l'aperçu sous les deux :

Comment résoudre les conflits de fusion dans Git (16)

Commencez maintenant à résoudre les conflits en sélectionnant l'une des options disponibles :

  • Accepter entrant
  • Accepter la combinaison (entrant en premier)
  • Accepter courant
  • Accepter la combinaison (actuelle en premier)

Entrant est le changement dans la branche que vous souhaitez fusionner dans une branche cible, et actuel est le changement déjà dans la branche dans laquelle vous souhaitez fusionner.

Passez à chaque fichier, cliquez sur le bouton "Résoudre dans l'éditeur de fusion" et sélectionnez l'une des options qui s'y trouvent.

Comment résoudre les conflits de fusion dans Git (17)

Vous pouvez également résoudre les conflits en saisissant le bon code dans chacun des fichiers.

Lorsque vous êtes satisfait, cliquez sur "Terminer la fusion" dans chaque éditeur de fusion :

Comment résoudre les conflits de fusion dans Git (18)

Vous devez ajouter à nouveau les fichiers et les valider :

git add .git commit -m ""

C'est ça! Si vous souhaitez que l'éditeur de fusion à 3 voies s'ouvre automatiquement lorsque vous souhaitez fusionner des conflits, cliquez sur "Paramètres" et recherchez "éditeur de fusion", puis cochez "ouvrir l'éditeur de fusion pour les fichiers actuellement en conflit".

Comment résoudre les conflits de fusion dans Git (19)

Emballer

Comme vous l'avez vu, avoir un conflit Git n'est pas aussi effrayant qu'il n'y paraît, et le résoudre n'est pas une tâche impossible. Vous pouvez généralement le résoudre directement sur GitHub ou dans votre éditeur de texte. L'éditeur de fusion à 3 voies de VS Code est également un moyen pratique de résoudre un conflit de fusion.

Si vous avez créé un PR pour une grande base de code et que vous avez un conflit de fusion, une autre façon de le résoudre pourrait être de rebaser avec main en exécutantgit pull --rebase principal en amont(selon le cas). Après cela, une interface vous sera présentée pour résoudre les conflits et les fichiers contenant les conflits. Lorsque vous avez terminé, courezgit add .,git rebase --continuer, puis forcez l'envoi vers votre branche.

PUBLICITÉ

PUBLICITÉ

PUBLICITÉ

PUBLICITÉ

PUBLICITÉ

PUBLICITÉ

PUBLICITÉ

PUBLICITÉ

PUBLICITÉ

PUBLICITÉ

Comment résoudre les conflits de fusion dans Git (20)
Colade Chris

Développeur Web et rédacteur technique se concentrant sur les technologies frontales. Je touche aussi à beaucoup d'autres technologies.

Si vous avez lu jusqu'ici, tweetez à l'auteur pour lui montrer que vous vous souciez de lui.

Apprenez à coder gratuitement. Le programme open source de freeCodeCamp a aidé plus de 40 000 personnes à obtenir des emplois en tant que développeurs.Commencer

PUBLICITÉ

Top Articles
Latest Posts
Article information

Author: Rob Wisoky

Last Updated: 10/20/2023

Views: 5841

Rating: 4.8 / 5 (68 voted)

Reviews: 83% of readers found this page helpful

Author information

Name: Rob Wisoky

Birthday: 1994-09-30

Address: 5789 Michel Vista, West Domenic, OR 80464-9452

Phone: +97313824072371

Job: Education Orchestrator

Hobby: Lockpicking, Crocheting, Baton twirling, Video gaming, Jogging, Whittling, Model building

Introduction: My name is Rob Wisoky, I am a smiling, helpful, encouraging, zealous, energetic, faithful, fantastic person who loves writing and wants to share my knowledge and understanding with you.