Back to Gitlabhq

Conflits de merge

doc-locale/fr-fr/user/project/merge_requests/conflicts.md

19.1.010.1 KB
Original Source

{{< details >}}

  • Niveau : Free, Premium, Ultimate
  • Offre : GitLab.com, GitLab Self-Managed, GitLab Dedicated

{{< /details >}}

Des conflits de merge surviennent lorsque deux branches dans un merge request, la source et la cible, ont des modifications différentes sur les mêmes lignes de code. Dans la plupart des cas, GitLab peut fusionner les modifications, mais lorsque des conflits surviennent, vous devez décider quelles modifications conserver.

Pour résoudre un merge request avec des conflits, vous devez soit :

  • Créer un commit de merge.
  • Résoudre le conflit via un rebase.

GitLab résout les conflits en créant un commit de merge dans la branche source sans le fusionner dans la branche cible. Vous pouvez ensuite examiner et tester le commit de merge pour vérifier qu'il ne contient aucune modification non intentionnelle et ne compromet pas votre build.

Comprendre les blocs de conflit {#understand-conflict-blocks}

Lorsque Git détecte un conflit nécessitant une décision de votre part, il marque le début et la fin du bloc de conflit avec des marqueurs de conflit :

  • <<<<<<< HEAD marque le début du bloc de conflit.
  • Vos modifications sont affichées.
  • ======= marque la fin de vos modifications.
  • Les dernières modifications de la branche cible sont affichées.
  • >>>>>>> marque la fin du conflit.

Pour résoudre un conflit, supprimez :

  1. La version des lignes en conflit que vous ne souhaitez pas conserver.
  2. Les trois marqueurs de conflit : le début, la fin et la ligne ======= entre les deux versions.

Conflits que vous pouvez résoudre dans l'interface utilisateur {#conflicts-you-can-resolve-in-the-user-interface}

Vous pouvez résoudre les conflits de merge dans l'interface utilisateur GitLab si le fichier en conflit :

  • Est un fichier texte non binaire.
  • Fait moins de 200 Ko avec les marqueurs de conflit ajoutés.
  • Utilise un encodage compatible UTF-8.
  • Ne contient pas de marqueurs de conflit.
  • Existe sous le même chemin dans les deux branches.

Si un fichier ne répond pas à ces critères, vous devez résoudre le conflit manuellement.

Méthodes de résolution des conflits {#conflict-resolution-methods}

GitLab affiche les conflits disponibles pour la résolution dans l'interface utilisateur, et vous pouvez également résoudre les conflits en utilisant les méthodes suivantes :

  • GitLab Duo : Idéal pour la résolution automatique et de bout en bout des conflits.
  • Mode interactif : Idéal pour les conflits où vous n'avez qu'à sélectionner la version d'une ligne à conserver.
  • Éditeur en ligne : Convient aux conflits complexes nécessitant des modifications manuelles pour combiner les changements.
  • Ligne de commande : Offre un contrôle total sur les conflits complexes. Pour plus d'informations, consultez résoudre les conflits depuis la ligne de commande.

Résoudre les conflits avec GitLab Duo {#resolve-conflicts-with-gitlab-duo}

{{< details >}}

  • Niveau : Premium, Ultimate
  • Offre : GitLab.com, GitLab Self-Managed, GitLab Dedicated
  • Statut : Bêta

{{< /details >}}

{{< history >}}

{{< /history >}}

[!flag] La disponibilité de cette fonctionnalité est contrôlée par un feature flag. Pour plus d'informations, consultez l'historique.

GitLab Duo peut analyser de manière autonome les conflits de merge, modifier les fichiers en conflit, créer un commit et pousser vers la branche source.

Prérequis :

Pour résoudre les conflits avec GitLab Duo :

  1. Dans la barre supérieure, sélectionnez Rechercher ou aller à et trouvez votre projet.
  2. Dans la barre latérale gauche, sélectionnez Code > Requêtes de fusion et trouvez le merge request.
  3. Sélectionnez Vue d'ensemble.
  4. Trouvez les détails du conflit de merge et demandez à GitLab Duo de résoudre les conflits :
    • Dans la section des rapports du merge request, sélectionnez Résoudre les conflits, puis sélectionnez Resolve with GitLab Duo.
    • Dans le widget de merge, trouvez la ligne de vérification des conflits et sélectionnez Resolve with GitLab Duo.

GitLab Duo analyse les conflits, les résout, valide les modifications et pousse vers la branche source. Une fois terminé, GitLab Duo publie un commentaire récapitulatif sur le merge request.

GitLab Duo respecte les règles de protection des branches et ne force pas le push vers les branches protégées.

Mode interactif {#interactive-mode}

Le mode interactif fusionne la branche cible dans la branche source avec vos modifications choisies.

Pour résoudre les conflits de merge en mode interactif :

  1. Dans la barre supérieure, sélectionnez Rechercher ou aller à et trouvez votre projet.

  2. Dans la barre latérale gauche, sélectionnez Code > Requêtes de fusion et trouvez le merge request.

  3. Sélectionnez Vue d'ensemble et faites défiler jusqu'à la section des rapports du merge request.

  4. Trouvez le message de conflits de merge et sélectionnez Résoudre les conflits. GitLab affiche une liste de fichiers avec des conflits de merge. Les lignes en conflit sont mises en surbrillance.

  5. Pour chaque conflit, sélectionnez Utilisez les nôtres ou Utilisez les leurs pour marquer la version des lignes en conflit que vous souhaitez conserver. Cette décision est connue sous le nom de « résolution du conflit ».

  6. Lorsque vous avez résolu tous les conflits, saisissez un Message de commit.

  7. Sélectionnez Validation sur la branche source.

Éditeur en ligne {#inline-editor}

Certains conflits de merge sont plus complexes et vous devez modifier les lignes manuellement pour les résoudre.

L'éditeur de résolution de conflits de merge vous aide à résoudre ces conflits dans GitLab :

  1. Dans la barre supérieure, sélectionnez Rechercher ou aller à et trouvez votre projet.

  2. Dans la barre latérale gauche, sélectionnez Code > Requêtes de fusion et trouvez le merge request.

  3. Sélectionnez Vue d'ensemble et faites défiler jusqu'à la section des rapports du merge request.

  4. Trouvez le message de conflits de merge et sélectionnez Résoudre les conflits. GitLab affiche une liste de fichiers avec des conflits de merge.

  5. Trouvez le fichier à modifier manuellement et faites défiler jusqu'au bloc de conflit.

  6. Dans l'en-tête de ce fichier, sélectionnez Modifier en ligne pour ouvrir l'éditeur. Dans cet exemple, le bloc de conflit commence à la ligne 1350 et se termine à la ligne 1356 :

  7. Après avoir résolu le conflit, saisissez un Message de commit.

  8. Sélectionnez Validation sur la branche source.

Rebase {#rebase}

Si votre merge request est bloqué avec un message Checking ability to merge automatically, vous pouvez :

Pour résoudre les problèmes de pipeline CI/CD, consultez le débogage des pipelines CI/CD.

Pour les projets utilisant la méthode de merge semi-linéaire ou fast-forward, vous pouvez également activer le rebase automatique avant le merge pour ignorer l'étape de rebase manuelle.

Rebase dans l'interface utilisateur GitLab {#rebase-in-the-gitlab-ui}

Pour déclencher un rebase depuis l'interface utilisateur GitLab, utilisez l'action rapide /rebase ou l'option de rebase dans le widget du merge request.

Prérequis :

Pour rebaser la branche d'un merge request depuis l'interface utilisateur GitLab :

  1. Dans la barre supérieure, sélectionnez Rechercher ou aller à et trouvez votre projet.
  2. Dans la barre latérale gauche, sélectionnez Code > Requêtes de fusion et trouvez le merge request.
  3. L'une ou l'autre des options :
    • Dans l'onglet Vue d'ensemble, faites défiler jusqu'au widget du merge request et sélectionnez Rebaser la branche source.
    • Dans un commentaire, saisissez /rebase et sélectionnez Commentaire.

GitLab planifie puis exécute un rebase de la branche par rapport à la branche par défaut. GitLab affiche le rebase terminé sous forme de note système.

[!note] Si vous avez configuré la signature des commits pour les commits effectués via l'interface utilisateur GitLab, les commits web perdent leurs signatures de commit lors du rebase via l'interface utilisateur.