web-dev-qa-db-fra.com

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

Une demande d'extraction arrive dans mon dépôt hébergé sur Github. Par défaut, il est fusionné dans la branche master.

Existe-t-il un moyen pour moi de changer la branche dans laquelle les modifications seraient intégrées?

107
eoinoc

à partir du 15.08.2016 GitHub permet de changer la branche cible d'une demande d'extraction 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 d'extraction ouverte. Une fois que vous avez créé une demande d'extraction, vous pouvez modifier la branche de base afin que les modifications apportées à la demande d'extraction soient comparées à une autre branche. En modifiant la branche de base de votre demande d'extraction d'origine plutôt que d'en ouvrir une nouvelle avec la branche de base appropriée, vous pourrez conserver un travail et des discussions utiles.

65
maliayas

L'émetteur peut changer cela lorsqu'il émet la demande d'extraction, mais une fois qu'il l'a émise, vous ne pouvez plus le changer.

D'un autre côté, vous pouvez fusionner manuellement leurs branches et Push, ce que je fais presque régulièrement pour les demandes d'extraction erronées.

Vous pouvez trouver le hub gem utile pour utiliser les composants de la demande d'extraction.

Ce joyau termine le processus manuel, qui est:

  1. Ajouter une télécommande pour la fourche à votre caisse locale.
  2. Va chercher cette télécommande.
  3. git checkout ${target_branch} && git merge ${remote}/${branch}
  4. git Push Origin ...
52
Daniel Pittman

Une alternative à l'utilisation de la gemme de concentrateur mentionnée par d'autres réponses consiste à tilisez la ligne de commande pour fusionner localement les demandes d'extraction , ce qui vous permet d'effectuer:

$ 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 d’abord la ligne suivante à votre .git/config fichier:

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

Cela vous permet de télécharger [~ # ~] toutes [~ # ~] demandes d'extraction. Comme cela n’est peut-être pas souhaitable pour les gros dépôts, GitHub a modifié les instructions pour inclure le git fetch Origin pull/ID/head:BRANCHNAME _ syntaxe, qui évite la modification du fichier de configuration et ne télécharge que cette demande d'extraction simple.

13

La solution de Daniel Pittman n’a rien d’erreur, mais j’aimerais traiter ces fusions comme "pas d’avance rapide", c’est-à-dire changer l’étape 3 pour:

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

En utilisant --no-ff, l’histoire sera plus facile à lire. Il sera clairement dit que $n les commits venaient de $branch, et cela vous facilitera la vie si vous avez besoin d’annuler quelque chose qui a été fait dans cette branche.

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

Une fois la fusion effectuée, votre git cli vous invitera à écrire un message. En général, un message générique apparaîtra, indiquant quelque chose comme:

Fusionnez la branche de suivi à distance 'utilisateur/leur branche' dans votre branche

Assurez-vous de modifier ce message et d'inclure une référence au numéro de demande d'extraction. C'est-à-dire: (en supposant que le numéro de demande d'extraction est 123)

Fusionnez la branche de suivi à distance 'utilisateur/leur branche' dans votre branche

refs # 123 résoudre quoi que ce soit ...

Ainsi, la prochaine fois que vous visiterez votre page de problèmes/demandes d'extraction de github et que vous vérifierez cette demande d'extraction particulière, vous verrez votre message avec un lien vous permettant de valider l'endroit où vous avez effectué la fusion.

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

enter image description here

8
Guillemo Mansilla

Bien que vous ne puissiez pas modifier la demande d'extraction existante car elle ne vous appartient pas, vous pouvez facilement en créer une nouvelle si le référentiel source associé existe toujours - oui, même s'il s'agit de quelqu'un d'autre.

Accédez au référentiel de l'émetteur, puis créez une nouvelle demande d'extraction dans son référentiel en utilisant les mêmes commits, mais assurez-vous de définir correctement la branche cible appropriée.

Retournez ensuite dans votre propre référentiel et acceptez la nouvelle demande d'extraction. Voila!

8
Carsten Schmitz

Pour ce faire, allez sur la page d'accueil de votre référentiel, cliquez sur les branches et modifiez la branche par défaut de master en autre chose, dans mon cas "dev".

Après cela, chaque fois que quelqu'un crée une demande d'extraction, le bouton merge la fusionnera automatiquement en "dev" plutôt qu'en maître.

enter image description here

6
abbood