Znajdź pull request na Githubie, w którym pierwotnie utworzono zatwierdzenie

171

Żądania ściągnięcia świetnie nadają się do zrozumienia szerszego myślenia o zmianie lub zestawie zmian wprowadzonych do repozytorium. Odczytywanie żądań ściągnięcia to świetny sposób na szybkie „oględzenie” projektu, ponieważ zamiast niewielkich, atomowych zmian w źródle, uzyskuje się większe grupy zmian logicznych. Jest to analogiczne do organizowania wierszy w kodzie w pokrewne „zwrotki” w celu ułatwienia czytania.

Widzę plik lub zatwierdzenie i zastanawiam się, czy istnieje sposób na cofnięcie zatwierdzenia do pull requesta, które go pierwotnie utworzyło. To żądanie ściągnięcia zostałoby ostatecznie scalone, ale nie jest to konieczne w przypadku zatwierdzenia scalającego.

DragonFax
źródło
1
+1 Jest to również przydatne, jeśli rozwidliłeś projekt i masz starą gałąź pracy i nie pamiętasz już, czy kiedykolwiek zrobiłeś dla niego PR.
Steve Clay

Odpowiedzi:

225

Możesz po prostu przejść do github i wpisać SHA w pasku wyszukiwania, upewnij się, że wybrałeś link „Problemy” po lewej stronie.

AKTUALIZACJA 13 lipca 2017 r

Dzięki interfejsowi Github jest teraz naprawdę łatwy sposób na zrobienie tego. Jeśli patrzysz na zatwierdzenie na liście zatwierdzeń w gałęzi w interfejsie użytkownika, kliknij łącze do samego zatwierdzenia. Jeśli istnieje PR dla tego zatwierdzenia i nie został on dodany bezpośrednio do gałęzi, łącze do PR zawierające numer PR i gałąź, do której przeszedł, będzie bezpośrednio pod komunikatem dotyczącym zatwierdzenia na górze strony. wprowadź opis obrazu tutaj


Przykład znalezienia PR poprzez kliknięcie linku do zatwierdzenia

Jeśli masz zatwierdzony SHA i nic więcej i nie chcesz go szukać, po prostu dodaj /commit/[commit SHA]do repozytorium url, a zobaczysz stronę zatwierdzenia z linkiem PR, jeśli istnieje. Na przykład, jeśli SHA to 52797a7a3b087231e4e391e11ea861569205aaf4, a repozytorium to https://github.com/glimmerjs/glimmer-vm , przejdź do https://github.com/glimmerjs/glimmer-vm/commit/52797a7e1169e1586

RustyToms
źródło
Nie mogę zmusić tego do pracy z krótkim SHA e4077951, czy to nadal działa dla ciebie?
Matt Sanders,
@RustyToms to działa, ale kiedy szukałem skrótu zatwierdzenia, tak jak wspomniałeś, [ github.com/wso2/carbon-kernel/ ... to dostarczyło mi dwa żądania ściągnięcia , oba połączyły to samo zatwierdzenie do mastera. W takim scenariuszu, co powinniśmy wybrać jako pull request, który połączył odpowiednie zatwierdzenie
Kasun Siyambalapitiya.
@RustyToms jak możemy to osiągnąć poprzez API
Kasun Siyambalapitiya
1
@marathon jest teraz jeszcze prostszy sposób, zaktualizuję odpowiedź
RustyToms
1
Jeśli nie ma odniesienia do PR, czy mogę stwierdzić, że nie było PR? Czyli zatwierdzenie zostało wykonane bezpośrednio w gałęzi (zwykle master)?
Erik
53
git config --add remote.origin.fetch +refs/pull/*/head:refs/remotes/origin/pull/*
git fetch origin
git describe --all  --contains <COMMIT>

W razie potrzeby zmień originnazwę pilota, która wskazuje repozytorium github, do którego wysłano by żądanie ściągnięcia. Pierwszą komendę wystarczy uruchomić tylko raz dla danego pilota, a drugą zazwyczaj wykonuje się podczas pobierania innych aktualizacji.

Spowoduje to, że git uzyska informacje o żądaniach ściągnięcia wraz z rzeczywistymi gałęziami. Pojawią się jako gałęzie zdalnego śledzenia, takie jak origin/pull/123. Gdy to zrobisz, możesz użyć git describez opcjami --alli, --containsaby wyświetlić pierwszą gałąź, do której odwołuje się zatwierdzenie.

Jednak to nie zadziała, jeśli zatwierdzenie, którego szukasz, jest w rzeczywistości zmodyfikowaną wersją zatwierdzenia z żądania ściągnięcia, na przykład jeśli zmiany zostały przeniesione na inną pracę lub osoba wykonująca scalanie zdecydowała się wprowadzić pewne zmiany.

qqx
źródło
Zakładam, że skutkuje to pobraniem wszystkich zatwierdzeń w odrzuconych PR. Czy nie ma sposobu, aby pobrać listę pull/*/headzatwierdzeń bez obiektów blob? Jak można po tym „wyczyścić” (zmienić konfigurację początków)?
Steve Clay
1
Dobrze jest wiedzieć; Nie miałem pojęcia, że ​​GitHub śledzi je jako rzeczywiste obiekty Git, ale ma to sens. Swoją drogą, czy miałeś na myśli użycie „upstream” zamiast „origin” w poleceniu konfiguracyjnym?
Tobias J
1
@TobyJ Użycie upstreamrzeczywiście było błędem. Skopiowałem to z repozytorium, które miało tę konfigurację, w której pilot został nazwany, upstreami przegapiłem to wystąpienie podczas zmiany go, aby używać bardziej powszechnej originnazwy pilota. Zredagowałem odpowiedź, aby to naprawić.
qqx
Dzięki! Ale to jest takie skomplikowane. Chciałbym, aby w interfejsie internetowym był link do zawierającego żądanie ściągnięcia.
Daniel Darabos
fwiw możesz też spróbować użyć refs/remotes/origin/pr/*zamiastrefs/remotes/origin/pull/*
elaichi
21

Od 13 października 2014 r. Powinno to być proste:

Na przykład:

Możesz zobaczyć w pliku hakimel/reveal.js/plugin/markdown/markdown.js, mój wkład zawiera teraz odniesienie do numeru PR # 734, z którego pochodzi.

PR z Contrib

Wynika to z łączenia połączonych żądań ściągnięcia z zatwierdzeń :

Zamieściliśmy zawierające gałęzie i tagi na stronach ze zmianami, aby dać ci więcej kontekstu wokół zmian. Teraz zatwierdzenia w domyślnej gałęzi repozytorium pokażą również żądanie ściągnięcia, które je wprowadziło.

zaangażuj się z odniesieniem do PR!

W żądaniu ściągnięcia możesz zobaczyć dyskusję na temat tego, dlaczego wprowadzono zatwierdzenie, i uzyskać jaśniejszy obraz przyczyny zmiany.

Jak zawsze, jeśli znasz SHA zatwierdzania, możesz pominąć stronę zatwierdzenia i bezpośrednio wyszukać żądanie ściągnięcia .

VonC
źródło
kiedy szukałem skrótu zatwierdzenia, jak wspomniałeś, [ github.com/wso2/carbon-kernel/ ... to dostarczyło mi dwa pull request, oba połączyły ten sam commit do mastera. W takim scenariuszu, co powinniśmy wybrać jako pull request, który połączył odpowiednie zatwierdzenie
Kasun Siyambalapitiya
@KasunSiyambalapitiya Nie jestem pewien: mógłbyś zadać nowe pytanie. Poszedłbym z najnowszym.
VonC,
2
czy możemy to uzyskać na APIpoziomie?
Kasun Siyambalapitiya
@KasunSiyambalapitiya Dobre pytanie. Nie wiem Nie widzę tego odniesienia w developer.github.com/v3/repos/commits/#get-a-single-commit
VonC,
@esp Ciekawe. Widzę listę PR, ale nie ich zatwierdzenie SHA1 oznaczające ich integrację.
VonC
10

Umieść skrót zatwierdzenia w polu filtrów żądania ściągnięcia w serwisie GitHub.

wprowadź opis obrazu tutaj

Dan Rosenstark
źródło
To jest najlepszy sposób IMO, jeśli PR nie został jeszcze scalony.
Sebastian Wagner
3

Miałem ten sam problem i napisałem pomocnika bash pr_for_sha, udokumentowanego tutaj:

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

Nazwij to jak, pr_for_sha <COMMIT>a otworzy odpowiednią stronę żądania ściągnięcia Github w przeglądarce.

Joey
źródło
2
To rozwiązanie zakłada, że ​​najbliższe scalenie po zatwierdzeniu jest scaleniem zawierającym zatwierdzenie, co niekoniecznie zawsze ma miejsce.
Jason Denney
@JasonDenney Podążając masz na myśli w danej branży czy w czasie?
LeZuse
Hmm, to było jakiś czas temu, ale myślę, że miałem na myśli czas. Powiedzmy, że w poniedziałek robisz zatwierdzenie „X” w gałęzi A, we wtorek dokonujesz zatwierdzenia w gałęzi B i łączysz gałąź B z główną, w środę łączysz gałąź A z wzorcem. Jeśli użyłeś tego skryptu do przeszukania w gałęzi master, dla której było zatwierdzenie PR "X", jestem prawie pewien, że nieprawidłowo powie ci gałąź B. Jednak sprawdź dwukrotnie.
Jason Denney
Nie mogę uruchomić git logpolecenia. 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.