Jak zaktualizować żądanie ściągnięcia z rozwidlonego repozytorium?


592

Więc najpierw rozwidliłem repo, a następnie dokonałem zatwierdzenia do tego rozwidlonego repo. Następnie otworzyłem żądanie ściągnięcia. Żądanie ściągnięcia zawierało wszystkie zmiany, które chciałem.

Po zapoznaniu się z moją prośbą o ściągnięcie wprowadzono szereg zmian, które właściciel repozytorium chciał, abym wprowadził, zanim je zaakceptuje. Dokonałem tych zmian w moim rozwidleniu, teraz jak zaktualizować żądanie ściągnięcia za pomocą tych zmian (czy to nie tak powinienem sobie z tym poradzić)?



7
@PaulDraper Nie zgadzam się, że użytkownik już zna i przedstawia różne metody aktualizacji żądania ściągnięcia, i pytam, który jest najlepszy. Ja natomiast nie znałem żadnych metod i pytałem o ich istnienie. Jak pokazuje popularność tego pytania, dotyczy to wielu innych użytkowników.
stevebot

6
Myślę, że popularność wynika z faktu, że (1) jest to bardzo dobre, częste pytanie i (2) niektórzy użytkownicy znaleźli się tutaj zamiast tam. Gdyby został pierwotnie zidentyfikowany jako duplikat, stwierdziliby, że drugie pytanie jest takie samo i odpowiedzieli na swoje pytanie.
Paul Draper,

Odpowiedzi:


584

Zrobiłeś to poprawnie. Żądanie ściągnięcia zostanie automatycznie zaktualizowane. Proces jest następujący:

  1. Otwórz żądanie ściągnięcia
  2. Zatwierdź zmiany w oparciu o informacje zwrotne w lokalnym repozytorium
  3. Popchnij do odpowiedniej gałęzi widelca

Żądanie ściągnięcia automatycznie doda nowe zatwierdzenia na dole dyskusji na temat żądania ściągnięcia (tj. . Już tam jest, przewiń w dół! )


73
miły! Sprawdzałem wszędzie, ale rzeczywiste żądanie ściągnięcia. jego magia, czarna magia, nie będę tego kwestionować.
stevebot

57
To dobry powód do pracy w oddziałach. Jeśli na przykład zawsze pchałeś do opanowania, możesz przypadkowo dodać do poprzedniego żądania ściągnięcia.
Brian Pan

3
Wydaje się, że już tak nie jest, nawet jeśli miało to miejsce w przeszłości. Oto przykład wysłanego przeze mnie żądania ściągnięcia ( github.com/toopay/bootstrap-markdown/pull/167 ) w porównaniu do samego oddziału ( github.com/mhuggins/bootstrap-markdown/commits/… ). Ciekawe, jak to zrobić, ponieważ wydaje się, że proces się zmienił.
Matt Huggins,

1
GitHub mówi ci: „Dodaj więcej zatwierdzeń, pchając do gałęzi SolveWorldHunger na ChangeTheWorldProject”.
flow2k

1
To samo tutaj - nie widzę zmian z rozwidlonego repozytorium w głównym repozytorium. Wygląda na błąd GitHub
andrfas

77

Aktualizacja żądania ściągnięcia w GitHub jest tak łatwa, jak zatwierdzenie żądanych zmian w istniejącym oddziale (który był używany z żądaniem ściągnięcia), ale często chce się też zmiażdżyć zmiany na pojedyncze zatwierdzenie:

git checkout yourbranch
git rebase -i origin/master

# Edit command names accordingly
  pick   1fc6c95 My pull request
  squash 6b2481b Hack hack - will be discarded
  squash dd1475d Also discarded

git push -f origin yourbranch

... a teraz żądanie ściągnięcia zawiera tylko jedno zatwierdzenie.


Powiązane linki na temat zmiany wersji:


2
Głos za wzmiankę o rebase. Pomaga wyciąć hałas w historii zmian.
stevebot

+11 (tak, miałem zamiar powtórzenia klucza. Używanie git rebase / pick / squash działa świetnie.
javadba

11
Minusem tego podejścia jest to, że usuwasz swoje wcześniejsze zatwierdzenie. Oznacza to, że jeśli w żądaniu ściągnięcia pojawią się komentarze, zostaną utracone i znikną wraz z oryginalnym zatwierdzeniem.
blowekamp

W Bitbucket możesz zobaczyć komentarze do „poprzednich wersji” pliku w żądaniu ściągnięcia. Chociaż byłoby miło zobaczyć coś takiego jak w Gerrit, gdzie łatasz zatwierdzenia i możesz zobaczyć całą historię z komentarzami. Zapewnia porządną historię git i identyfikowalność, kiedy możesz wrócić i zobaczyć pełną dyskusję na temat każdego zatwierdzenia.
Miłość

35

Wystarczy nacisnąć gałąź, do której odwołuje się żądanie ściągnięcia. Tak długo, jak żądanie ściągnięcia jest nadal otwarte, powinno być automatycznie aktualizowane o wszelkie dodane zatwierdzenia.


14

Zrobiłem to, wykonując poniższe czynności:

  1. git reset --hard <commit key of the pull request>
  2. Czy moje zmiany w kodzie chciałem zrobić
  3. git add
  4. git commit --amend
  5. git push -f origin <name of the remote branch of pull request>

1
Bardzo dobrze, wolę takie podejście! GitHub ukrywa nawet (ale zachowuje) przestarzałe sekcje kodu i powiązane komentarze. Warto pamiętać, że jeśli żądanie ściągnięcia zawiera kilka zatwierdzeń, a ten, który wymaga naprawy, nie znajduje się na końcu gałęzi, polecenie „git reset --hard” odrzuci wszystkie zmiany zatwierdzone po określonym identyfikatorze. Miałem kopię zapasową, którą zastosowałem ręcznie. Niezbyt wygodne, jeśli istnieje więcej niż jedno dodatkowe zatwierdzenie ...
Nagev

3

Jeśli używasz GitHub w systemie Windows :

  1. Wprowadź zmiany lokalnie.
  2. Otwórz GitHub, przejdź do lokalnych repozytoriów, repozytorium dwukrotnie kliknij.
  3. Przełącz gałąź (w górnej części okna) na gałąź, z której utworzono żądanie ściągnięcia (tj. Gałąź po stronie widelca porównania)
  4. Powinien zobaczyć opcję wprowadzenia komentarza zatwierdzenia po prawej stronie i zatwierdzenia zmian w lokalnym repozytorium.
  5. Kliknij synchronizację na górze, która między innymi wypycha zatwierdzenie z lokalnego do zdalnego rozwidlenia na GitHub.
  6. Żądanie ściągnięcia zostanie zaktualizowane automatycznie o dodatkowe zatwierdzenia. Jest tak, ponieważ wyciągnięte żądanie reprezentuje różnicę w gałęzi rozwidlenia. Jeśli przejdziesz do strony żądania ściągnięcia (tej, na której ty i inni możecie komentować twoje żądanie ściągnięcia), wtedy karta Zatwierdzenia powinna mieć twoje dodatkowe zatwierdzenia.

Dlatego przed rozpoczęciem wprowadzania własnych zmian należy utworzyć gałąź dla każdego zestawu zmian, które planujesz wprowadzić w żądaniu ściągnięcia. W ten sposób po wysłaniu żądania ściągnięcia możesz utworzyć kolejną gałąź i kontynuować pracę nad innym zadaniem / funkcją / poprawką błędu bez wpływu na poprzednie żądanie ściągnięcia.

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.