171 votes

Fusionner la demande de tirage vers une branche différente de celle par défaut, dans Github

Une demande de retrait arrive dans mon repo hébergé sur Github. Par défaut, elle est fusionnée dans le master branche.

Y a-t-il un moyen pour moi de changer la branche dans laquelle les changements seront fusionnés ?

145voto

maliayas Points 1964

En date du 15.08.2016 GitHub permet de changer la branche cible d'une demande de retrait via l'interface graphique. Cliquez sur Edit à côté du titre, puis sélectionnez la branche dans la liste déroulante.

screenshot

Vous pouvez maintenant changer la branche de base d'une demande de pull ouverte. Après avoir créé une demande de retrait, vous pouvez modifier la branche de base afin que les modifications de la demande de retrait soient comparées à une autre branche. En modifiant la branche de base de votre demande de retrait initiale plutôt que d'en ouvrir une nouvelle avec la branche de base correcte, vous serez en mesure de conserver le travail et les discussions de valeur.

55voto

Daniel Pittman Points 7394

L'auteur de la demande peut la modifier lorsqu'il émet la demande de retrait, mais une fois qu'il l'a émise, vous ne pouvez plus la modifier.

D'un autre côté, vous pouvez fusionner manuellement leur branche et pousser, ce que je fais semi-régulièrement pour les demandes de retrait mal ciblées.

Vous pouvez trouver le hub pierre précieuse utile pour travailler avec les composants de la demande de retrait.

Cette gemme résume le processus manuel, qui est :

  1. Ajouter une télécommande pour la bifurcation vers votre caisse locale.
  2. Va chercher cette télécommande.
  3. git checkout ${target_branch} && git merge ${remote}/${branch}
  4. git push origin ...

15voto

Une alternative à l'utilisation du hub gem mentionné par d'autres réponses est de utiliser la ligne de commande pour fusionner les demandes de pull locales qui vous permet de faire :

$ git fetch origin
$ git checkout *target_branch*
$ git merge pr/XXX
$ git push origin *target_branch*

Les commandes ci-dessus ne fonctionnent directement que si vous ajoutez tout d'abord la ligne suivante à votre fichier .git/config fichier :

fetch = +refs/pull/*/head:refs/remotes/symbolic_name_origin_or_upstream/pr/*

Ce que cela fait, c'est vous permettre de télécharger TOUTES demandes de pull. Comme cela n'est peut-être pas souhaitable pour les dépôts volumineux, GitHub a modifié les instructions pour mettre en avant l'option git fetch origin pull/ID/head:BRANCHNAME qui évite de modifier le fichier de configuration et ne télécharge que cette seule demande de pull.

10voto

Deckard Points 1042

Bien que vous ne puissiez pas modifier la demande de retrait existante car elle ne vous appartient pas, vous pouvez facilement en créer une nouvelle si le dépôt de sources associé existe toujours - oui, même s'il appartient à quelqu'un d'autre.

Allez dans le dépôt de l'auteur de la demande et créez une nouvelle demande de retrait dans son dépôt en utilisant les mêmes commits mais assurez-vous de définir correctement la branche cible.

Puis retournez dans votre propre dépôt et acceptez la nouvelle demande de pull. Et voilà !

8voto

Guillemo Mansilla Points 1575

Il n'y a rien de mal dans la solution de Daniel Pittman, mais je traiterais ces fusions comme "sans avance rapide", c'est-à-dire en modifiant l'étape numéro 3 pour :

git checkout ${target_branch} && git merge --no-ff ${remote}/${branch}

En utilisant --no-ff l'histoire sera plus facile à lire. Elle dira clairement que $n proviennent de $branch Cela vous facilitera également la vie si vous devez revenir en arrière sur quelque chose qui a été fait dans cette branche.

Pour répondre également à la question d'eoinoc et donner un conseil supplémentaire :

Après avoir effectué la fusion, votre clique git vous demandera d'écrire un message, généralement un message générique s'affichera disant quelque chose comme

Fusionner la branche de suivi à distance 'user/their-branch' dans votre-branche

Assurez-vous d'éditer ce message et d'inclure une référence au numéro de la demande de retrait. C'est-à-dire (En supposant que le numéro de la demande de retrait est 123)

Fusionner la branche de suivi à distance 'user/their-branch' dans votre-branche

refs #123 en train de résoudre quoi que ce soit...

Ainsi, la prochaine fois que vous visiterez votre page github issues/pull-requests et que vous vérifierez cette pull request particulière, vous verrez votre message avec un lien vers le commit où vous avez effectué la fusion.

Voici une capture d'écran de ce que je veux dire.

enter image description here

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