Moja prośba o ściągnięcie została scalona, ​​co dalej?

112

Niedawno brałem udział w projekcie z GitHub. Zrobiłem co następuje:

Rozwidliłem oryginalne repozytorium, sklonowałem je na moją maszynę lokalną, stworzyłem gałąź, aby naprawić istniejący błąd, naprawiony błąd w tej gałęzi, wypchnął tę gałąź do mojego repozytorium, wyślij żądanie ściągnięcia do autora repozytorium, aby scalić gałąź napraw do jego główna gałąź.

To był mój pierwszy raz, kiedy zaangażowałem się w kod innej osoby, więc nie wiem, co robić. Teraz moje żądanie ściągnięcia zostało scalone z oryginalnym repozytorium / projektem przez autora.

Co mam teraz zrobić? Czy powinienem usunąć oddział? Czy powinienem scalić oddział? Coś jeszcze?


Dodatkowe informacje:

Oryginalny projekt ma jedną gałąź.

Mam również zewnętrzny zestaw do pobierania najnowszych aktualizacji z oryginalnego repozytorium. (Zrobiłem to tak) :

git remote add upstream https://path/to/original/repo.git

Otrzymuję takie aktualizacje:

git fetch upstream
Santosh Kumar
źródło
12
Ghehe, nie tylko ty walczysz: Film na YouTube :)
Anne,

Odpowiedzi:

65

Co dalej to: kontynuowanie dodawania nowych funkcji lub naprawianie innych błędów w ich własnych dedykowanych gałęziach (wypychanych tylko do forka).

Oznacza to, że widelec pozostaje, ale gałęzie w widelcu mogą wchodzić i odchodzić.

Możesz również usunąć widełki, jeśli nie planujesz dalej wnosić wkładu, ale spowoduje to usunięcie odpowiedniego wpisu w „Repozytoriach, do których przyczyniasz się” .

Łatwiej jest:

  • usuń swoją fixgałąź (właściwie jest teraz usunięta dla Ciebie ) na Twoim forku (i w lokalnym sklonowanym repozytorium: zobacz „ Usuwanie gałęzi Git zarówno lokalnie, jak i zdalnie ”)
  • git pull upstream master(jeśli masterbyła to gałąź, w której została zintegrowana twoja poprawka: scalanie będzie przyspieszone): w tym momencie nie jest potrzebne ponowne bazowanie.
  • odtwórz gałąź poprawek na zaktualizowanym lokalnym master(teraz z najnowszą wersją z upstream master).

Jednak nigdy nie zapomnij o jednym kroku przed przesłaniem przyszłego żądania ściągnięcia:

Najpierw odtwórz bieżącą gałąź ( fix) z górnej gałęzi docelowej

( upstreambędąc oryginalnym repozytorium, które rozwidliłeś: zobacz „ Jaka jest różnica między źródłem początkowym a wyższym w githubie ”)

Przed przesłaniem czegokolwiek z powrotem do oryginalnego repozytorium („upstream”), musisz upewnić się, że Twoja praca opiera się na najnowszych informacjach z tego pierwotnego repozytorium (w przeciwnym razie żądanie ściągnięcia nie spowoduje szybkiego scalenia do przodu po zastosowaniu ponownie w upstreamrepozytorium).
Zobacz na przykład „ Przepływ pracy dotyczący zarządzania żądaniami ściągnięcia dla udostępnionych repozytoriów na githubie ”.

Innymi słowy, upstreammoże ewoluować (narzucane są nowe zatwierdzenia), gdy jesteś zajęty naprawianiem rzeczy. Musisz odtworzyć swoje poprawki na podstawie ostatniej pracy z nadawcy, aby upewnić się, że zmiany są nadal zgodne z najnowszymi upstream.


OP Santosh Kumar pyta w komentarzach :

Wyciągnąłem i połączyłem się z upstreammaster, co teraz?

Jeśli nie wprowadziłeś żadnych nowych poprawek od ostatniego żądania ściągnięcia, zobacz powyżej (usuń i utwórz nową gałąź fixna podstawie zaktualizowanej master).

Jeśli wykonałeś więcej pracy od czasu żądania ściągnięcia, nie połączyłbym się z, upstreamgdybym chciał utworzyć nowe żądanie ściągnięcia: Wyciągnąłbym i ponownie bazował :

git pull --rebase upstream master

W ten sposób cała moja nowa lokalna praca jest odtwarzana wraz z najnowszymi upstream masterzatwierdzeniami (pobranymi z mojego lokalnego repozytorium), zakładając, żemaster jest to gałąź docelowa, która zintegruje moje przyszłe żądanie ściągnięcia.

Następnie mogę skierować moją lokalną pracę do ' origin', czyli mojego rozwidlenia na GitHubie upstream.
Z mojego rozwidlenia na GitHubie mogę bezpiecznie wykonać żądanie ściągnięcia, wiedząc, że doda ono tylko nowe zatwierdzenia upstreambez potrzeby rozwiązywania scalania: scalenie tych nowych zatwierdzeń w upstreamrepozytorium będzie oznaczać proste szybkie scalanie do przodu.


A git pull --rebasebez określenia gałęzi, na której chcesz zmienić bazę (aktualnie wyewidencjonowaną) fixgałąź nie zadziała:

To ( git pull --rebase) mówi:

You asked to pull from the remote '`upstream`', but did not specify a branch. 

Czy powinienem wreszcie dołączyć mistrza? A co to zrobi? Czy spowoduje usunięcie mojego fixoddziału?

Tak, możesz określić gałąź, która będzie celem żądania ściągnięcia, na przykład „ master”.
To nie usunie twojej fixgałęzi, ale odtworzy ją na wierzchu masterpobranego z twojego repozytorium.

VonC
źródło
Czy możesz wyjaśnić rebase z wcześniejszej części?
Santosh Kumar
@SantoshKumar, musisz zmienić bazę lokalnych zatwierdzeń na oryginalnym repozytorium (tutaj określanym jako upstream), zanim przejdziesz do forka i wykonasz żądanie pull: zobacz stackoverflow.com/questions/9257533/ ...
VonC
Tak, wiem, że zadaję podstawowe pytanie. Wyciągnąłem i połączyłem się od upstream do mastera, co teraz?
Santosh Kumar
@SantoshKumar to dobre pytanie. Zredagowałem odpowiedź, aby go rozwiązać. Poszukaj „OP Santosh Kumar pyta w komentarzach: ...”
VonC
To mówi: You asked to pull from the remote 'upstream', but did not specify a branch.czy powinienem masterwreszcie dołączyć ? A co to zrobi? Czy usunie gałąź poprawek ?
Santosh Kumar
18

Po pierwsze, gratulujemy pierwszego wkładu w projekt na Github.

Zwykły przepływ pracy na Github polega na tworzeniu nowej gałęzi dla każdego rozwiązanego problemu. W ten sposób opiekun głównego repozytorium może zdecydować, które z rozwiązań chcesz połączyć, a które odrzucić. Po scaleniu gałęzi w górę, gałąź nie będzie już potrzebna i zwykle można ją usunąć.

Philipp
źródło