Git peut souvent résoudre les différences entre les branches et les fusionner automatiquement. En règle générale, les modifications se trouvent sur différentes lignes ou dans différents fichiers, afin que Git puisse les fusionner sans aide. Parfois, les changements concurrents ont besoin de votre aide. Les conflits de fusion se produisent souvent lorsque des personnes apportent des modifications différentes à la même ligne du même fichier, ou lorsqu’une personne modifie un fichier et qu’une autre personne supprime le même fichier.
Les conflits de fusion bloquent la fusion, car Git ne peut pas choisir en toute sécurité la version du contenu en conflit à conserver. Vous devez résoudre tous les conflits de fusion avant de pouvoir fusionner une pull request sur GitHub. Si votre pull request présente un conflit de fusion entre la branche de comparaison et la branche de base, le bouton Fusionner la pull request est désactivé jusqu’à ce que les conflits soient résolus.
Résolution des conflits de fusion
La résolution d’un conflit de fusion signifie choisir le contenu final qui doit apparaître une fois les branches fusionnées. L’outil approprié dépend du type de conflit.
-
Les conflits de lignes simples peuvent souvent être résolus sur GitHub. Consultez « Resolving a merge conflict on GitHub ».
-
Les conflits plus complexes doivent être résolus dans un clone local et envoyés vers la branche de la pull request. Consultez « Resolving a merge conflict using the command line ».
-
Si vous avez accès à Agent cloud Copilot et que cette fonctionnalité est activée pour le référentiel, Copilot peut vous aider à résoudre les conflits depuis la zone de fusion. Voir Utilisation de l’agent cloud Copilot sur GitHub.
Sur la ligne de commande, Git vous indique quand une fusion ne peut pas se terminer automatiquement. Vous ne pouvez pas pousser le résultat fusionné tant que vous n’avez pas résolu le conflit et validé la résolution.
$ git merge BRANCH-NAME
> Auto-merging styleguide.md
> CONFLICT (content): Merge conflict in styleguide.md
> Automatic merge failed; fix conflicts and then commit the result