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
:)
Odpowiedzi:
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:
fix
gałąź (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ślimaster
była to gałąź, w której została zintegrowana twoja poprawka: scalanie będzie przyspieszone): w tym momencie nie jest potrzebne ponowne bazowanie.master
(teraz z najnowszą wersją zupstream 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(
upstream
bę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
upstream
repozytorium).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,
upstream
moż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 najnowszymiupstream
.OP Santosh Kumar pyta w komentarzach :
Jeśli nie wprowadziłeś żadnych nowych poprawek od ostatniego żądania ściągnięcia, zobacz powyżej (usuń i utwórz nową gałąź
fix
na podstawie zaktualizowanejmaster
).Jeśli wykonałeś więcej pracy od czasu żądania ściągnięcia, nie połączyłbym się z,
upstream
gdybym chciał utworzyć nowe żądanie ściągnięcia: Wyciągnąłbym i ponownie bazował :W ten sposób cała moja nowa lokalna praca jest odtwarzana wraz z najnowszymi
upstream
master
zatwierdzeniami (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 GitHubieupstream
.Z mojego rozwidlenia na GitHubie mogę bezpiecznie wykonać żądanie ściągnięcia, wiedząc, że doda ono tylko nowe zatwierdzenia
upstream
bez potrzeby rozwiązywania scalania: scalenie tych nowych zatwierdzeń wupstream
repozytorium będzie oznaczać proste szybkie scalanie do przodu.A
git pull --rebase
bez określenia gałęzi, na której chcesz zmienić bazę (aktualnie wyewidencjonowaną)fix
gałąź nie zadziała:Tak, możesz określić gałąź, która będzie celem żądania ściągnięcia, na przykład „
master
”.To nie usunie twojej
fix
gałęzi, ale odtworzy ją na wierzchumaster
pobranego z twojego repozytorium.źródło
You asked to pull from the remote 'upstream', but did not specify a branch.
czy powinienemmaster
wreszcie dołączyć ? A co to zrobi? Czy usunie gałąź poprawek ?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ąć.
źródło