71 votes

Comment résoudre un conflit de fusion dans une pull request dans VSTS ?

J'ai créé une demande d'accès à l'information (pull request) :

enter image description here

Le bouton "Approuver" ne fait rien et le bouton "Compléter" est désactivé.

Comment résoudre ce conflit dans la demande d'extraction ?

63voto

jessehouwing Points 16951

Mise à jour

Microsoft vient d'ajouter des fusions basées sur le navigateur. Cela peut vous sortir d'un mauvais pas pour les petits conflits.

Et propose des visualisations améliorées des différents scénarios à partir de Sprint 150 .

Pour les situations plus complexes :

Vous avez deux options pour résoudre le conflit, réintégrer les changements de la branche cible (ce qui crée des commits de fusion supplémentaires), ou rebaser sur la branche cible (ce qui laisse votre historique propre et agréable).


Fusionner de la branche cible à la branche actuelle avant de compléter le PR.

Vous devez cloner le dépôt localement, effectuer une fusion de la branche cible vers votre branche et pousser ces changements vers le dépôt. VSTS détectera les changements et mettra à jour la pull request.

            -------o3              PR
           /
---------o1-o2                     target

Fusionner target (o2) a PR :

            -------o3-o4           PR
           /          /
---------o1----------o2            target

Complétez ensuite le PR

            -------o3-o4           PR
           /          / \
---------o1----------o2--o5        target

Rebasez la branche PR pour inclure les derniers changements sur la cible

Vous pouvez également cloner le repo localement, rebaser la branche PR sur la dernière version de la branche cible, résoudre tous les problèmes liés au rebasement et forcer le retour des modifications sur la branche PR. VSTS détectera les changements et mettra à jour la pull request.

            -------o3              PR
           /
---------o1-o2                     target

Ainsi, rebasez o3 sur o2 :

              -------o3            PR
             /
---------o1-o2                     target

Complétez ensuite le formulaire PR (avec fusion en avance rapide dans le cas ci-dessous) :

---------o1-o2-o3                  target

29voto

sky91 Points 1686
  1. Ouvrez votre projet avec Visual Studio.
  2. Ouvrir Voir > Team Explorer
  3. Passer à Branches tabulation.
  4. Double-cliquez sur la branche que vous souhaitez fusionner (par exemple dev).
  5. Clic droit > Fusionner à partir de > Sélectionner
    Fusionner à partir de la branche : maître ,
    Dans la branche actuelle : dev
  6. Cliquez sur Fusionner bouton
  7. Choisir le(s) fichier(s) de conflit
  8. Ensuite, il faut résoudre les conflits. Vous pouvez cliquer sur la case de gauche ou de droite de la section que vous souhaitez inclure.
  9. Puis valider la fusion
  10. Fait.

Pour répondre à la question de @metabuddy :

Et après ? Cela montre seulement comment résoudre les conflits localement, je ne peux pas pousser la branche cible ou source directement vers VSTS parce que j'ai des politiques de branches qui exigent que les pull requests soient faites à partir de branches de fonctionnalités.

Vous pouvez suivre les étapes ci-dessus. La branche source et la branche cible seront légèrement différentes.

  1. la branche fusionne à partir de : maître
  2. dans la branche : votre-branche-fonctionnalité
  3. Créer une Pull Request pour fusionner à partir de votre-branche-fonctionnalité en maître

9 votes

Et après ? Cela montre seulement comment résoudre les conflits localement, je ne peux pas pousser la branche cible ou source directement vers VSTS parce que j'ai des politiques de branches qui exigent que les pull requests soient faites à partir de branches de fonctionnalités.

1 votes

@metabuddy : L'auteur de cette réponse a supposé que vous fusionniez dev dans master. Si vous avez une pull request de la branche fonctionnalité dans dev, vous pouvez localement fusionner dev dans votre branche fonctionnalité, résoudre le conflit et pousser la branche fonctionnalité.

0 votes

Si je fais une pull request de my-feature-branch vers master (après avoir fusionné les conflits), je ne peux pas continuer parce qu'il n'y a pas de différences entre les deux branches. Cela rend en quelque sorte les PR obsolètes.

9voto

BipinR Points 306

Vous pouvez utiliser la technique décrite ci-dessus par @jessiehouwing ou utiliser le nouveau plug-in. MicrosoftDevLabs a publié le lien vers le plugin pour résoudre les conflits. Le lien vers le plugin est donné ci-dessous https://marketplace.visualstudio.com/items?itemName=ms-devlabs.conflicts-tab

1 votes

Après avoir suivi les étapes du lien et être arrivé à l'étape "Accept merge", je ne vois aucun commit de fusion. Comment puis-je continuer à développer à ce stade ? Est-ce que le fait de fusionner le PR est ma seule option à ce stade ?

0voto

Haider Ali Wajihi Points 600

Cette réponse fait référence au commentaire de @metabuddy sur la réponse de @sky91

Que se passe-t-il si votre branche cible est 'master' et que sur la branche 'master' vous avez appliqué les politiques pour ne pas accepter les fusions directes ?

Note : Considérons que 'master' est la branche cible et 'x001' la branche source dans la demande d'extraction, qui a des conflits entre les branches 'master' et 'x001'.

Dans ce cas, la solution proposée par @sky91 ne fonctionnera pas. Pour cela, vous devez suivre les étapes suivantes.

  1. Créer une nouvelle branche à partir de la branche cible ('master'), comme 'x002'.
  2. Allez dans Visual Studio et sélectionnez "x002".
  3. Fusionner 'x002' de la branche 'x001'.
  4. Allez dans votre pull request et changez la branche cible en 'x002'
  5. Il montrera les mêmes conflits que ceux que vous avez dans la pull request.
  6. Résoudre tous les conflits et valider la fusion.
  7. Lorsque vous rafraîchissez la page de la demande d'extraction, il apparaîtra que les "changements ont déjà été fusionnés".
  8. Il faut que le bouton 'Close' apparaisse. Si c'est le cas, alors fermez cette pull request.
  9. Toutes vos modifications ont été fusionnées et sauvegardées dans 'x002'.
  10. Créer une nouvelle demande de pull de 'x002' à 'master'
  11. Comme tous les conflits ont disparu, il sera possible de fusionner avec la branche "master".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X