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.