Jak mogę sprawdzić żądanie ściągnięcia GitHub za pomocą git?


251

Chciałbym sprawdzić wcześniej utworzone żądanie ściągnięcia (utworzone przez interfejs sieciowy GitHub). Szukałem i znalazłem różne miejsca, w których refs / pull lub refs / pull / pr

Ale kiedy dodaję fetch = +refs/pull/*/head:refs/remotes/origin/pr/*do pliku konfiguracyjnego git i wykonuję pobieranie git

Co robię źle? Czy GitHub powinien automatycznie tworzyć rzeczy typu pull / xyz, czy też muszę coś skonfigurować?


Jak wygląda pełna zdalna sekcja pliku konfiguracyjnego?



Skończyło się na tym pytaniu, ale tak naprawdę potrzebowałem stackoverflow.com/q/1783405/2413303
EpicPandaForce

1
Drugi akapit nie jest pełnym zdaniem. „Ale kiedy dodam ... i zrobię pobieranie git” - kiedy robisz te rzeczy, co się dzieje?
cp.engr

Odpowiedzi:


385

Aby pobrać zdalny PR do lokalnego repozytorium,

git fetch origin pull/ID/head:BRANCHNAME

gdzie IDjest identyfikatorem żądania ściągnięcia i BRANCHNAMEjest nazwą nowego oddziału, który chcesz utworzyć. Po utworzeniu oddziału, po prostu

git checkout BRANCHNAME

Więcej informacji znajduje się w oficjalnej dokumentacji GitHub .


11
Użyłem tego, aby pobrać pr z repozytorium upstream do mojego lokalnego repozytorium rozwidlonego, możesz również zastąpić origin z upstream.
Jngai1297

18
Moje polecenie skończyło się nie tak git fetch origin pull/1/head:githubusername, jak się spodziewałem
Anthony

1
jak przywrócić?
fico7489,

8
@Antoine BRANCHNAMEjest tym, co chcesz nazwać oddział. Zgaduję, że próbowałeś użyć nazwy, która już istniała (np. master) I która nie działała, więc próbowałeś swojej nazwy użytkownika, która zadziałała, ponieważ nie była to gałąź o tej nazwie. Być może źle zrozumiałem, co mówiłeś.
Nateowami,

1
Może się zdarzyć, że lokalne repozytorium zostało skonfigurowane w sposób originwskazujący na widelec i upstream- na oryginalne repozytorium ( na przykład help.github.com/articles/configuring-a-remote-for-a-fork ). Pamiętaj, aby zmienić originna upstreamwe wspomnianym poleceniu, jeśli chcesz pobrać żądanie ściągnięcia z oryginalnego repozytorium.
mvlabat

127

Spowoduje to pobranie bez konieczności podawania nazwy oddziału:

git pull origin pull/939/head

Jak uzyskać określone żądanie ściągnięcia na moim komputerze?


To wystarczy, tks
rll

Ten zadziałał dla mnie, metoda pobierania timbo zrobiła coś, ale nie była właściwa
malhal

30
Zwróć uwagę, że jeśli zrobisz to na przykład w gałęzi master, zostanie ona zatwierdzona bezpośrednio w tej gałęzi. Jeśli chcesz przenieść żądanie ściągnięcia do osobnej gałęzi do przemieszczania, wypróbuj odpowiedź @ timbo.
feniks

3
To samo, co powiedział @phoenix. Chcę, aby gałąź żądania ściągania została zduplikowana na moim komputerze w jej własnym oddziale, a nie w trybie głównym.
Paul Chernoch

Działa to również, jeśli później chcesz pobrać zmiany z żądania ściągnięcia do lokalnego oddziału.
luator

52

Ten opis opisuje, co się stanie, gdy wykonasz pobranie git:

Oczywiście zmień adres URL github, aby pasował do adresu URL projektu. W efekcie wygląda to tak:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@github.com:joyent/node.git
    fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

Teraz pobierz wszystkie żądania ściągnięcia:

$ git fetch origin
From github.com:joyent/node
 * [new ref]         refs/pull/1000/head -> origin/pr/1000
 * [new ref]         refs/pull/1002/head -> origin/pr/1002
 * [new ref]         refs/pull/1004/head -> origin/pr/1004
 * [new ref]         refs/pull/1009/head -> origin/pr/1009
...

Aby sprawdzić konkretne żądanie ściągnięcia:

$ git checkout pr/999
Branch pr/999 set up to track remote branch pr/999 from origin.
Switched to a new branch 'pr/999'

Masz różne skrypty wymienione w numerach 259, aby zautomatyzować to zadanie.
Projekt git-extras proponuje polecenie git-pr(zaimplementowane w PR 262 )

git-pr(1) - Sprawdza żądanie ściągania lokalnie

STRESZCZENIE

git-pr <number> [<remote>]
git-pr clean

OPIS

Tworzy lokalną gałąź na podstawie numeru żądania ściągania GitHub, a następnie przełącza się na tę gałąź.

Nazwa pilota do pobrania. Domyślnie to origin.

PRZYKŁADY

To sprawdza żądanie ściągnięcia 226z origin:

$ git pr 226

remote: Counting objects: 12, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 12 (delta 3), reused 9 (delta 3)
Unpacking objects: 100% (12/12), done.
From https://github.com/visionmedia/git-extras
  * [new ref] refs/pull/226/head -> pr/226
Switched to branch 'pr/226'

38

Wolę pobierać i kasować bez tworzenia lokalnego oddziału i być w stanie odłączonym HEAD . Pozwala mi to szybko sprawdzić żądanie ściągnięcia bez zanieczyszczania mojej lokalnej maszyny niepotrzebnymi lokalnymi oddziałami.

git fetch upstream pull/ID/head && git checkout FETCH_HEAD

gdzie IDjest identyfikator żądania ściągnięcia i upstreamgdzie jest utworzone oryginalne żądanie ściągnięcia (może to być originna przykład).

Mam nadzieję, że to pomoże.


1
Podoba mi się to rozwiązanie. Jedną z korzyści jest to, że jeśli PR zostanie zaktualizowany o więcej zatwierdzeń, możesz po prostu uruchomić go ponownie i spowoduje to pobranie nowych zatwierdzeń.
Alex Johnson

14

Odwołując się do odpowiedzi Stevena Penny'ego, najlepiej utworzyć gałąź testową i przetestować PR. Oto co byś zrobił.

  1. Utwórz gałąź testową, aby scalić PR z lokalnie. Zakładając, że jesteś w gałęzi master:

git checkout -b test

  1. Pobierz zmiany PR w gałęzi testowej

git pull origin pull/939/head:test

Teraz możesz bezpiecznie przetestować zmiany w tym lokalnym oddziale testowym (w tym przypadku o nazwie test ), a gdy będziesz zadowolony, możesz połączyć go jak zwykle z GitHub.


1
Wybrałbym jeszcze jeden - stworzyłbym zestaw roboczy, ustawiłem go na nową testgałąź i NASTĘPNIE włączyłem PR - w ten sposób nie muszę przywracać gałęzi lokalnie po zakończeniu; Po prostu pozbywam się stołu roboczego. W rzeczywistości NIGDY checkout -bjuż nie jestem - zawsze tworzę drzewo robocze, a następnie rozgałęziam się. Dysk jest tani. Oczywiście mam skrypt, który to robi; Nie wpisuję wszystkich potrzebnych poleceń indywidualnie.
mpersico,

11

Jeśli korzystasz z Github.com, przejdź do „Żądań ściągania”, kliknij odpowiednie żądanie ściągania, a następnie kliknij link „instrukcje wiersza poleceń”: instrukcje wiersza poleceń na Github.com


Powiedzmy, czy faktycznie jest sposób - kiedy patrzysz na github.com, to znaczy - pobrać nowe / zmienione pliki PR? Tak więc, kiedy patrzysz na repo na github, możesz kliknąć przydatny przycisk „pobierz jako plik zip”, lub po prostu możesz po prostu kliknąć i po prostu spojrzeć na każdy (cały) plik projektu. W przypadku PR nie widzę, jak po prostu kliknąć, aby „spojrzeć na plik” - wiesz, co mam na myśli? Czy coś brakuje? Twoje zdrowie!
Fattie,

9

Możesz użyć git configpolecenia, aby napisać nową regułę w .git/configcelu pobrania żądań ściągnięcia z repozytorium:

$ git config --local --add remote.origin.fetch '+refs/pull/*/head:refs/remotes/origin/pr/*'

A potem tylko:

$ git fetch origin
Fetching origin
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 2), reused 4 (delta 2), pack-reused 0
Unpacking objects: 100% (4/4), done.
From https://github.com/container-images/memcached
 * [new ref]         refs/pull/2/head -> origin/pr/2
 * [new ref]         refs/pull/3/head -> origin/pr/3

8

Problem z niektórymi z powyższych opcji polega na tym, że jeśli ktoś popchnie więcej PR do PR po otwarciu PR, nie dostarczy Ci najbardziej zaktualizowanej wersji. Dla mnie to, co zadziałało najlepiej - przejdź do PR i naciśnij „Zatwierdzenia”, przewiń w dół, aby zobaczyć najnowszy skrót zatwierdzenia, wprowadź opis zdjęcia tutaj a następnie po prostu użyj kasy

git checkout <commit number>

w powyższym przykładzie

git checkout 0ba1a50


2
Uderzyłem właśnie ten problem z git fetch origin pull/ID/head:BRANCHNAMEpodejściem wymienionym w stackoverflow.com/a/30584951/659732 . Dzięki za rozwiązanie!
joewiz


5

W przypadku Bitbucket musisz zamienić słowo pullna pull-requests.

Po pierwsze, możesz potwierdzić styl adresu URL żądania ściągnięcia za pomocą git ls-remote originpolecenia.

$ git ls-remote origin |grep pull
f3f40f2ca9509368c959b0b13729dc0ae2fbf2ae    refs/pull-requests/1503/from
da4666bd91eabcc6f2c214e0bbd99d543d94767e    refs/pull-requests/1503/merge
...

Jak widać, jest to refs/pull-requests/1503/fromzamiastrefs/pull/1503/from

Następnie możesz użyć poleceń dowolnej z odpowiedzi.


4

Przypadkowo skończyło się na tym, że pisałem prawie tak samo, jak w przypadku git-dodatków. Więc jeśli wolisz jedno niestandardowe polecenie zamiast instalować kilka innych dodatkowych poleceń, po prostu umieść ten git-prplik gdzieś w swoim, $PATHa następnie możesz po prostu napisać:

git pr 42
// or
git pr upstream 42
// or
git pr https://github.com/peerigon/phridge/pull/1

4

Jeśli postępujesz zgodnie z obiegiem pracy „github fork”, w którym tworzysz widelec i dodajesz zdalne repozytorium upstream:

14:47 $ git remote -v
origin  git@github.com:<yourname>/<repo_name>.git (fetch)
origin  git@github.com:<yourname>/<repo_name>.git (push)
upstream        git@github.com:<repo_owrer>/<repo_name>.git (fetch)
upstream        git@github.com:<repo_owner>/<repo_name>.git (push)

aby wejść do twojej aktualnej gałęzi, twoje polecenie wyglądałoby następująco:

git pull upstream pull/<pull_request_number>/head

aby pobrać do nowej gałęzi kod wyglądałby następująco:

git fetch upstream pull/<pull_request_number>/head:newbranch

3

Github wydał niedawno narzędzie cli o nazwie github-cli . Po jego zainstalowaniu możesz sprawdzić lokalnie gałąź żądania ściągnięcia, używając jej identyfikatora

na przykład: gh pr checkout 2267

Pamiętaj, że ten pakiet jest wciąż w fazie beta


1

Przenieś zdalny oddział PR do oddziału lokalnego:

git fetch origin ‘remote_branch’:‘local_branch_name’

Ustaw upstream oddziału lokalnego na oddział zdalny.

git branch --set-upstream-to=origin/PR_Branch_Name local_branch

Gdy chcesz ponownie przekazać zmiany lokalne do gałęzi PR

git push origin HEAD:remote_PR_Branch_name


0

Załóżmy, że twoje pochodzenie i informacje o wysyłaniu są jak poniżej

   $ git remote -v
   origin  git@github.com:<yourname>/<repo_name>.git (fetch)
   origin  git@github.com:<yourname>/<repo_name>.git (push)
   upstream   git@github.com:<repo_owner>/<repo_name>.git (fetch)
   upstream   git@github.com:<repo_owner>/<repo_name>.git (push)

a nazwa twojego oddziału jest podobna

   <repo_owner>:<BranchName>

następnie

   git pull origin <BranchName>

wykona robotę


Podczas udostępniania kodu spróbuj wyjaśnić kod
Yunus Temurlenk

-3

Jeśli ich zatwierdzenia znajdują się w gałęzi głównej ich rozwidlonego repozytorium, możesz wykonać następujące czynności.

git fetch git@github.com:<repo_owner>/<repo_name>.git
git checkout FETCH_HEAD
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.