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.


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


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.


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 .


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


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.


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.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.