Odpowiedzi:
Od 15.08.2016 GitHub umożliwia zmianę gałęzi docelowej żądania ściągnięcia za pośrednictwem GUI. Kliknij Edit
obok tytułu, a następnie wybierz gałąź z listy rozwijanej.
Możesz teraz zmienić gałąź podstawową otwartego żądania ściągnięcia. Po utworzeniu żądania ściągnięcia można zmodyfikować gałąź podstawową, aby zmiany w żądaniu ściągnięcia były porównywane z inną gałęzią. Zmieniając gałąź podstawową oryginalnego żądania ściągnięcia zamiast otwierać nową z prawidłową gałęzią podstawową, będziesz w stanie zachować cenną pracę i dyskusję.
Przesyłający może to zmienić, gdy wyda żądanie ściągnięcia, ale po wydaniu nie można tego zmienić.
Z drugiej strony możesz ręcznie scalić ich gałąź i wypychać, co robię półregularnie w przypadku błędnie ukierunkowanych żądań ściągnięcia.
hub
Klejnot może być pomocny w pracy z komponentami żądania ściągnięcia.
Ten klejnot zamyka proces ręczny, którym jest:
git checkout ${target_branch} && git merge ${remote}/${branch}
git push origin ...
git merge --no-ff ...
jak wspomina @GuillermoMansilla w swojej odpowiedzi.
Alternatywą dla korzystania z klejnotu centrum wspomnianego w innych odpowiedziach jest użycie wiersza poleceń do lokalnego scalenia żądań ściągnięcia , co pozwala na:
$ git fetch origin
$ git checkout *target_branch*
$ git merge pr/XXX
$ git push origin *target_branch*
Powyższe polecenia działają bezpośrednio tylko wtedy, gdy najpierw dodasz następujący wiersz do .git/config
pliku:
fetch = +refs/pull/*/head:refs/remotes/symbolic_name_origin_or_upstream/pr/*
Umożliwia to pobranie WSZYSTKICH żądań ściągnięcia. Ponieważ może to nie być pożądane w przypadku dużych repozytoriów, GitHub zmodyfikował instrukcje tak, aby zawierały git fetch origin pull/ID/head:BRANCHNAME
składnię, co pozwala uniknąć modyfikacji pliku konfiguracyjnego i pobiera tylko to pojedyncze żądanie ściągnięcia.
Chociaż nie możesz zmienić istniejącego żądania ściągnięcia, ponieważ nie jest ono twoje, możesz łatwo utworzyć nowe, jeśli powiązane repozytorium źródłowe nadal istnieje - tak, nawet jeśli należy do kogoś innego.
Przejdź do repozytorium przesyłającego, a następnie utwórz nowe żądanie ściągnięcia w jego / jej repozytorium, używając tych samych zatwierdzeń, ale upewnij się, że poprawnie ustawiłeś właściwą gałąź docelową.
Następnie wróć do własnego repozytorium i zaakceptuj nowe żądanie ściągnięcia. Voila!
Nie ma nic złego w rozwiązaniu Daniela Pittmana, jednak te połączenia potraktowałbym jako „brak szybkiego przewijania do przodu”, czyli zmiana kroku numer 3 na:
git checkout ${target_branch} && git merge --no-ff ${remote}/${branch}
Używając --no-ff
, historia będzie łatwiejsza do odczytania. Wyraźnie powie, że $n
pochodzą z zatwierdzeń $branch
, a także ułatwi ci życie, jeśli będziesz musiał cofnąć coś, co zostało zrobione w tej gałęzi.
Aby również odpowiedzieć na pytanie eoinoc i udzielić dodatkowej wskazówki:
Po wykonaniu scalenia git cli poprosi Cię o napisanie wiadomości, generalnie pojawi się ogólna wiadomość o treści podobnej do
Scal oddział zdalnego śledzenia „użytkownik / jego gałąź” z twoim oddziałem
Pamiętaj, aby edytować ten komunikat i dołączyć odwołanie do numeru żądania ściągnięcia. To znaczy: (Zakładając, że numer żądania ściągnięcia to 123)
Scal oddział zdalnego śledzenia „użytkownik / jego gałąź” z twoim oddziałem
refs # 123 rozwiązując cokolwiek ...
Więc następnym razem, gdy odwiedzisz stronę problemów / żądań ściągnięcia na Github i sprawdzisz to konkretne żądanie ściągnięcia, zobaczysz swoją wiadomość z linkiem do zatwierdzenia miejsca, w którym dokonałeś scalenia.
Oto zrzut ekranu tego, co mam na myśli.
Aby to zrobić, przejdź do strony domowej repozytorium, kliknij na gałęzie i zmień domyślną gałąź z master na coś innego, w moim przypadku "dev".
Następnie, za każdym razem, gdy ktoś utworzy żądanie ściągnięcia, merge
przycisk automatycznie połączy żądanie z "deweloperem" zamiast głównym.