Suchen Sie eine Pull-Anforderung in Github, in der ursprünglich ein Commit erstellt wurde

171

Pull-Anfragen sind ideal, um das größere Denken in Bezug auf eine Änderung oder eine Reihe von Änderungen an einem Repo zu verstehen. Das Lesen von Pull-Anforderungen ist eine großartige Möglichkeit, ein Projekt schnell zu "groken", da Sie anstelle kleiner atomarer Änderungen an der Quelle größere Gruppierungen logischer Änderungen erhalten. Analog zur Organisation der Zeilen in Ihrem Code in verwandten "Strophen", um das Lesen zu erleichtern.

Ich sehe mir eine Datei oder ein Commit an und frage mich, ob es eine Möglichkeit gibt, das Commit auf die Pull-Anforderung zurückzuverfolgen, die es ursprünglich erstellt hat. Diese Pull-Anforderung wäre schließlich zusammengeführt worden, aber mit einem Merge-Commit nicht erforderlich.

DragonFax
quelle
1
+1 Dies ist auch nützlich, wenn Sie ein Projekt gegabelt haben und einen alten Arbeitszweig herumstehen und sich nicht mehr daran erinnern, ob Sie jemals eine PR dafür gemacht haben.
Steve Clay

Antworten:

225

Sie können einfach zu Github gehen und den SHA in die Suchleiste eingeben. Stellen Sie sicher, dass Sie den Link "Probleme" auf der linken Seite auswählen.

AKTUALISIERT am 13. Juli 2017

Über die Github-Benutzeroberfläche gibt es jetzt eine wirklich einfache Möglichkeit, dies zu tun. Wenn Sie sich ein Commit in der Liste der Commits in einem Zweig der Benutzeroberfläche ansehen, klicken Sie auf den Link zum Commit selbst. Wenn für dieses Commit eine PR vorhanden ist und diese nicht direkt zur Filiale hinzugefügt wurde, befindet sich ein Link zur PR mit der PR-Nummer und der Filiale, in die sie gegangen ist, direkt unter der Commit-Nachricht oben auf der Seite. Geben Sie hier die Bildbeschreibung ein


Beispiel für die Suche nach einem PR durch Klicken auf einen Link zum Commit

Wenn Sie die Commit-SHA und nichts anderes haben und nicht danach suchen möchten, fügen Sie einfach /commit/[commit SHA]die Repo-URL hinzu, und Sie sehen die Commit-Seite mit dem PR-Link, falls vorhanden. Wenn der SHA beispielsweise 52797a7a3b087231e4e391e11ea861569205aaf4 lautet und das Repo https://github.com/glimmerjs/glimmer-vm lautet , gehen Sie zu https://github.com/glimmerjs/glimmer-vm/commit/52797a1aaaaaaaaaaaaaa

RustyToms
quelle
Ich kann das nicht mit einem kurzen SHA zum Laufen bringen e4077951. Funktioniert das immer noch für Sie?
Matt Sanders
@RustyToms das funktioniert, aber als ich nach einem Commit-Hash gesucht habe, wie Sie es erwähnt haben, [ github.com/wso2/carbon-kernel/… bietet es mir zwei Pull-Anfragen, beide haben das gleiche Commit mit dem Master zusammengeführt. In einem solchen Szenario sollten wir als Pull-Anfrage auswählen, die das relevante Commit zusammenführt
Kasun Siyambalapitiya
@RustyToms wie können wir dies durch die API erreichen
Kasun Siyambalapitiya
1
@ Marathon gibt es einen noch einfacheren Weg, es jetzt zu tun, ich werde die Antwort aktualisieren
RustyToms
1
Wenn es keinen Hinweis auf eine PR gibt, kann ich daraus schließen, dass es keine PR gab? Das heißt, das Commit wurde (normalerweise master) direkt in der Filiale vorgenommen ?
Erik
53
git config --add remote.origin.fetch +refs/pull/*/head:refs/remotes/origin/pull/*
git fetch origin
git describe --all  --contains <COMMIT>

Ändern Sie gegebenenfalls originden Namen der Fernbedienung, die auf das Github-Repository verweist, an das die Pull-Anforderung gesendet worden wäre. Der erste Befehl muss für eine bestimmte Fernbedienung nur einmal ausgeführt werden, und der zweite Befehl wird im Allgemeinen ausgeführt, wenn andere Updates abgerufen werden.

Dies führt dazu, dass git Informationen zu Pull-Anforderungen zusammen mit den tatsächlichen Zweigen erhält. Sie werden als Remote-Tracking-Zweige wie angezeigt origin/pull/123. Sobald das erledigt ist , können Sie verwenden , git describemit dem --allund --contains Optionen , um den ersten Zweig zu zeigen , die den Commit verwiesen hat.

Dies funktioniert jedoch nicht, wenn es sich bei dem gesuchten Commit tatsächlich um eine modifizierte Version des Commits aus der Pull-Anforderung handelt, z. B. wenn die Änderungen auf andere Arbeiten übertragen wurden oder die Person, die die Zusammenführung durchführt, beschlossen hat, einige Änderungen vorzunehmen.

qqx
quelle
Ich gehe davon aus, dass dies dazu führt, dass alle Commits in abgelehnten PRs heruntergeladen werden. Gibt es keine Möglichkeit, die Liste der pull/*/headCommits ohne die Blobs abrufen zu lassen? Wie würde man danach "aufräumen" (die Ursprünge neu konfigurieren)?
Steve Clay
1
Das ist gut zu wissen; Ich hatte keine Ahnung, dass GitHub diese als tatsächliche Git-Objekte verfolgt, aber es macht vollkommen Sinn. Übrigens wollten Sie in Ihrem Konfigurationsbefehl "upstream" anstelle von "origin" verwenden?
Tobias J
1
@TobyJ Die Verwendung von upstreamwar in der Tat ein Fehler. Ich hatte das aus einem Repository kopiert, das diese Konfiguration hatte, in der die Fernbedienung benannt wurde, upstreamund dieses Vorkommen übersehen, als ich es so änderte, dass die häufigere originals Name der Fernbedienung verwendet wurde. Ich habe die Antwort bearbeitet, um das zu beheben.
qqx
Vielen Dank! Das ist aber so kompliziert. Ich wünschte, es gäbe einen Link zu der enthaltenen Pull-Anfrage auf der Web-Benutzeroberfläche.
Daniel Darabos
fwiw können Sie auch versuchen, refs/remotes/origin/pr/*anstelle vonrefs/remotes/origin/pull/*
elaichi
21

Seit dem 13. Oktober 2014 sollte dies unkompliziert sein:

Beispielsweise:

Sie können für die Datei sehen hakimel/reveal.js/plugin/markdown/markdown.js, mein Beitrag enthält jetzt einen Verweis auf die PR # 734, aus der er stammt.

PR von Contrib

Dies ergibt sich aus dem Verknüpfen von zusammengeführten Pull-Anforderungen von Commits :

Wir haben die enthaltenen Zweige und Tags in die Festschreibungsseiten aufgenommen , um Ihnen mehr Kontext zu Änderungen zu bieten. Commits im Standardzweig eines Repositorys zeigen Ihnen jetzt auch die Pull-Anforderung an, mit der sie eingeführt wurden.

Commit mit PR-Referenz drin!

In der Pull-Anfrage sehen Sie die Diskussion darüber, warum das Commit eingeführt wurde, und erhalten ein klareres Bild des Grundes für die Änderung.

Wie immer können Sie, wenn Sie den Commit-SHA kennen, die Commit-Seite überspringen und direkt nach der Pull-Anfrage suchen .

VonC
quelle
Als ich nach einem Commit-Hash gesucht habe, wie Sie es erwähnt haben, [ github.com/wso2/carbon-kernel/… , habe ich zwei Pull-Anforderungen, beide haben das gleiche Commit mit dem Master zusammengeführt. In einem solchen Szenario sollten wir als Pull-Anfrage auswählen, bei der das relevante Commit zusammengeführt wurde
Kasun Siyambalapitiya
@ KasunSiyambalapitiya Nicht sicher: Sie könnten eine neue Frage dafür stellen. Ich würde mit dem neuesten gehen.
VonC
2
können wir dies in der APIEbene erhalten?
Kasun Siyambalapitiya
@ KasunSiyambalapitiya Gute Frage. Ich weiß es nicht. Ich sehe diese Referenz nicht in developer.github.com/v3/repos/commits/#get-a-single-commit
VonC
@esp Interessant. Ich sehe eine Liste von PR, aber nicht deren SHA1-Commit, das ihre Integration kennzeichnet.
VonC
10

Fügen Sie den Commit-Hash in das Feld Pull Request-Filter auf GitHub ein.

Geben Sie hier die Bildbeschreibung ein

Dan Rosenstark
quelle
Dies ist IMO der beste Weg, wenn die PR noch nicht zusammengeführt wurde.
Sebastian Wagner
3

Ich hatte das gleiche Problem und schrieb den hier dokumentierten pr_for_sha-Bash-Helfer:

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

Nennen Sie es wie pr_for_sha <COMMIT>und es öffnet sich die entsprechende Github-Pull-Anforderungsseite in einem Browser.

Joey
quelle
2
Bei dieser Lösung wird davon ausgegangen, dass die nächste Zusammenführung nach dem Festschreiben die Zusammenführung ist, die das Festschreiben enthält, was nicht unbedingt immer der Fall ist.
Jason Denney
@JasonDenney Mit Folgen meinen Sie in der angegebenen Branche oder in der Zeit?
LeZuse
Hmm, das ist schon eine Weile her, aber ich glaube, ich habe es rechtzeitig gemeint. Angenommen, Sie machen am Montag ein Commit "X" in Zweig A, am Dienstag machen Sie ein Commit in Zweig B und führen Zweig B zum Master zusammen, am Mittwoch führen Sie Zweig A zum Master zusammen. Wenn Sie dieses Skript verwendet haben, um eine Suche in dem Hauptzweig durchzuführen, in dem sich das PR-Commit "X" befand, bin ich mir ziemlich sicher, dass es Ihnen Zweig B fälschlicherweise mitteilt. Überprüfen Sie dies jedoch selbst.
Jason Denney
Der git logBefehl kann nicht ausgeführt werden . 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.