Rechercher une Pull Request sur Github où un commit a été créé à l'origine

171

Les Pull Requests sont parfaits pour comprendre la réflexion globale autour d'un changement ou d'un ensemble de modifications apportées à un repo. La lecture des pull requests est un excellent moyen de "grok" rapidement un projet car, au lieu de petits changements atomiques à la source, vous obtenez de plus grands regroupements de changements logiques. Cela revient à organiser les lignes de votre code en «strophes» connexes pour le rendre plus facile à lire.

Je me retrouve en train de regarder un fichier ou un commit et je me demande s'il existe un moyen de revenir en arrière sur le commit vers la Pull Request qui l'a créé à l'origine. Cette Pull Request aurait finalement été fusionnée, mais pas nécessaire avec un merge-commit.

DragonFax
la source
1
+1 Ceci est également utile si vous avez forké un projet et avez une ancienne branche de travail assise et que vous ne vous souvenez plus si vous avez déjà fait un PR pour cela.
Steve Clay

Réponses:

226

Vous pouvez simplement aller sur github et entrer le SHA dans la barre de recherche, assurez-vous de sélectionner le lien "Problèmes" sur la gauche.

MISE À JOUR 13 juillet 2017

Via l'interface utilisateur de Github, il existe désormais un moyen très simple de le faire. Si vous regardez un commit dans la liste des commits dans une branche de l'interface utilisateur, cliquez sur le lien vers le commit lui-même. S'il existe un PR pour ce commit et qu'il n'a pas été ajouté directement à la branche, un lien vers le PR listant le numéro du PR et la branche dans laquelle il est entré sera directement sous le message de commit en haut de la page. entrez la description de l'image ici


Exemple de recherche d'un PR en cliquant sur un lien vers le commit

Si vous avez le SHA de validation et rien d'autre et que vous ne voulez pas fouiller pour cela, ajoutez simplement /commit/[commit SHA]à l'URL du dépôt, et vous verrez la page de validation, avec le lien PR s'il existe. Par exemple, si le SHA est 52797a7a3b087231e4e391e11ea861569205aaf4 et que le dépôt est https://github.com/glimmerjs/glimmer-vm , puis accédez à https://github.com/glimmerjs/glimmer-vm/commit/52797a7a3a3be08209e439531

RustyToms
la source
Je ne peux pas faire fonctionner cela avec un SHA court comme e4077951, est-ce que cela fonctionne toujours pour vous?
Matt Sanders
@RustyToms cela fonctionne, mais quand j'ai recherché un hachage de commit comme vous l'avez mentionné, [ github.com/wso2/carbon-kernel/ ... il me fournit deux requêtes Pull qui ont fusionné le même commit avec le maître. Dans ce genre de scénario, ce que nous devrions sélectionner comme la demande Pull qui a fusionné le commit concerné
Kasun Siyambalapitiya
@RustyToms comment pouvons-nous y parvenir grâce à l'API
Kasun Siyambalapitiya
1
@marathon, il existe un moyen encore plus simple de le faire maintenant, je vais mettre à jour la réponse
RustyToms
1
S'il n'y a aucune référence à un PR, puis-je conclure qu'il n'y a pas eu de PR? Autrement dit, le commit a été effectué directement sur la branche (généralement master)?
Erik
53
git config --add remote.origin.fetch +refs/pull/*/head:refs/remotes/origin/pull/*
git fetch origin
git describe --all  --contains <COMMIT>

Si nécessaire, modifiez originle nom de la télécommande qui pointe vers le référentiel github auquel la demande d'extraction aurait été envoyée. La première commande ne doit être exécutée qu'une seule fois pour une télécommande donnée, et la seconde sera généralement exécutée lors de l'obtention d'autres mises à jour.

Cela amènera git à obtenir des informations sur les requêtes d'extraction avec les branches réelles. Ils apparaissent comme des branches de suivi à distance comme origin/pull/123. Une fois que cela est fait, vous pouvez utiliser git describeavec les options --allet --containspour afficher la première branche qui a le commit référencé.

Cependant, cela ne fonctionnera pas si le commit que vous recherchez est en fait une version modifiée du commit à partir de la demande d'extraction, par exemple si les modifications ont été rebasées sur un autre travail ou si la personne effectuant la fusion a décidé d'apporter des modifications.

qqx
la source
Je suppose que cela entraîne le téléchargement de tous les commits dans les PR rejetés. N'existe-t-il aucun moyen de demander à fetch d'obtenir la liste des pull/*/headvalidations sans les blobs? Comment «nettoyer» après cela (reconfigurer les origines)?
Steve Clay
1
C'est bon à savoir; Je n'avais aucune idée que GitHub les avait suivis en tant qu'objets Git réels, mais c'est parfaitement logique. BTW vouliez-vous utiliser "en amont" au lieu de "origine" sur votre commande de configuration?
Tobias J
1
@TobyJ L'utilisation de upstreamétait en effet une erreur. J'avais copié cela à partir d'un référentiel qui avait cette configuration où la télécommande était nommée upstreamet j'avais manqué cette occurrence en la changeant pour utiliser le plus courant origincomme nom de la télécommande. J'ai édité la réponse pour résoudre ce problème.
qqx
Merci! Mais c'est tellement compliqué. Je souhaite qu'il y ait un lien vers la demande de tirage contenant sur l'interface utilisateur Web.
Daniel Darabos
fwiw, vous pouvez également essayer d'utiliser à la refs/remotes/origin/pr/*place derefs/remotes/origin/pull/*
elaichi
21

Depuis le 13 octobre 2014, cela devrait être simple:

Par exemple:

Vous pouvez voir pour le fichier hakimel/reveal.js/plugin/markdown/markdown.js, ma contribution vient maintenant avec une référence au PR # 734 dont elle est issue.

PR de contrib

Cela vient de la liaison des demandes d'extraction fusionnées à partir de commits :

Nous avons inclus les branches et les balises contenant sur les pages de validation pour vous donner plus de contexte autour des changements. Désormais, les validations dans la branche par défaut d'un référentiel vous montreront également la pull request qui les a introduites.

engagez-vous avec une référence PR!

Dans la demande d'extraction, vous pouvez voir la discussion sur la raison pour laquelle le commit a été introduit et obtenir une image plus claire de la raison du changement.

Comme toujours, si vous connaissez le SHA de validation, vous pouvez ignorer la page de validation et rechercher directement la demande d'extraction .

VonC
la source
quand j'ai recherché un hachage de commit comme vous l'avez mentionné, [ github.com/wso2/carbon-kernel/ ... il me fournit deux Pull request, les deux ont fusionné le même commit avec le maître. Dans ce genre de scénario, ce que nous devrions sélectionner comme la demande Pull qui a fusionné le commit concerné
Kasun Siyambalapitiya
@KasunSiyambalapitiya Pas sûr: vous pourriez poser une nouvelle question pour ça. J'irais avec le plus récent.
VonC
2
pouvons-nous obtenir cela en APIniveau?
Kasun Siyambalapitiya
@KasunSiyambalapitiya Bonne question. Je ne sais pas. Je ne vois pas cette référence dans developer.github.com/v3/repos/commits/#get-a-single-commit
VonC
@esp Intéressant. Je vois une liste de PR, mais pas leur commit SHA1 marquant leur intégration.
VonC
10

Placez le hachage de validation dans le champ Filtres de demande d'extraction sur GitHub.

entrez la description de l'image ici

Dan Rosenstark
la source
C'est l'OMI le meilleur moyen, si le PR n'a pas encore fusionné.
Sebastian Wagner
3

J'ai eu ce même problème et j'ai écrit l'aide de bash pr_for_sha, documentée ici:

http://joey.aghion.com/find-the-github-pull-request-for-a-commit/

Appelez-le comme pr_for_sha <COMMIT>et il ouvrira la page de demande d'extraction github correspondante dans un navigateur.

Joey
la source
2
Cette solution suppose que la fusion la plus proche après la validation est la fusion qui contient la validation, ce qui n'est pas nécessairement toujours le cas.
Jason Denney
@JasonDenney Par suivre vous voulez dire dans la branche donnée ou dans le temps?
LeZuse
Hmm, c'était il y a quelque temps, mais je pense que je voulais dire à temps. Disons que lundi vous faites un commit "X" dans la branche A, mardi vous faites un commit dans la branche B et fusionnez la branche B avec master, mercredi vous fusionnez la branche A avec master. Si vous avez utilisé ce script pour faire une recherche alors que sur la branche principale pour laquelle le commit PR "X" était dans, je suis presque sûr qu'il vous indiquerait incorrectement la branche B. Vérifiez par vous-même.
Jason Denney
Impossible de faire fonctionner la git logcommande. git log --merges --ancestry-path --oneline 66100ab0..master- fatal: ambiguous argument '66100ab0..master': unknown revision or path not in the working tree.-git version 2.25.0
Gianfranco P.