Mam projekt z wieloma oddziałami. Naciskałem je na GitHub , a teraz, gdy ktoś inny pracuje nad projektem, muszę pobrać ich gałęzie z GitHub. Działa dobrze w trybie master. Ale powiedz, że ktoś utworzył oddział xyz
. Jak mogę pobrać gałąź xyz
z GitHub i scalić ją xyz
z moją gałęzią localhost
?
Właściwie mam tutaj swoją odpowiedź: pchaj i ciągnij gałęzie w Git
Ale pojawia się błąd „! [Odrzucony]” i coś o „nie przewijaniu do przodu”.
Jakieś sugestie?
git fetch origin --force
”, ale należy przeczytać dokumentację przed wykonaniem tej czynności.Odpowiedzi:
Wynika to z faktu, że Git nie może scalić zmian z gałęzi z bieżącym mistrzem. Załóżmy, że sprawdziłeś gałąź
master
i chcesz połączyć się ze zdalną gałęziąother-branch
. Kiedy to zrobisz:Git robi to w zasadzie:
To znaczy, a
pull
po nimfetch
następujemerge
. Jednak, gdypull
-ing, Git będzie tylko scalićother-branch
jeśli można to wykonać szybko naprzód seryjnej. Fast-forward seryjnej jest scalanie, w której szef oddziału, który próbujesz scalić jest bezpośrednim potomkiem szefa oddziału chcesz scalić. Na przykład, jeśli masz to drzewo historii, scalenieother-branch
spowoduje szybkie scalenie:Nie byłoby to jednak szybkie przewijanie do przodu:
Aby rozwiązać problem, najpierw pobierz gałąź zdalną:
Następnie połącz go z bieżącym oddziałem (zakładam, że to
master
) i napraw wszelkie konflikty scalania:źródło
git fetch -f
naprawiło mój problem! Dzięki!xzy
lokalnymmaster
, czego nie sugerowało pierwotne pytanie; „Jak mogę pobrać gałąź xyz z GitHub i scalić go z gałęzią xyz na moim komputerze lokalnym?”Wystarczy jawnie śledzić zdalne gałęzie, a prosty
git pull
zrobi dokładnie to, co chcesz:Ta ostatnia jest operacją lokalną.
Lub jeszcze bardziej pasuje do dokumentacji GitHub na temat rozwidlania :
źródło
Możesz przeciągnąć gałąź do gałęzi za pomocą następujących poleceń.
Gdy jesteś w gałęzi master, możesz również najpierw pobrać gałąź taką jak:
Spowoduje to utworzenie nowej gałęzi „xyz” z poziomu głównego i bezpośrednie sprawdzenie.
Następnie wykonujesz:
Spowoduje to przyciągnięcie nowego oddziału do
xyz
oddziału lokalnego .źródło
Najlepszym sposobem jest:
źródło
git fetch
pobierze najnowszą listę oddziałów.Teraz możesz
git checkout MyNewBranch
Gotowy :)
Aby uzyskać więcej informacji, zobacz dokumentacja: git fetch
źródło
Nie jestem pewien, czy w pełni rozumiem problem, ale ściąganie istniejącej gałęzi odbywa się w ten sposób (przynajmniej działa dla mnie :)
Zakłada się, że lokalny oddział utworzono na podstawie źródła / ODDZIAŁU.
źródło
Pomogło mi to uzyskać zdalny oddział przed połączeniem go z innymi:
źródło
Mówiąc wprost, jeśli chcesz pobrać z GitHub oddział
the_branch_I_want
:źródło
Zwykle jeśli masz tylko repo przypisane do swojego kodu, to gitreponame będzie pochodzić.
Jeśli pracujesz na dwóch repozytoriach, tak jak jedno jest lokalne, a drugie dla pilota, możesz sprawdzić listę repo z git remote -v . pokazuje to, ile repozytoriów jest przypisanych do twojego bieżącego kodu.
BranchName powinna istnieć w odpowiedniej gitreponame.
możesz użyć następujących dwóch poleceń, aby dodać lub usunąć repozytorium
źródło
możesz również zrobić
naprawić ewentualne konflikty scalania
-r jest dla bazy. W ten sposób utworzysz strukturę oddziału
do
Doprowadzi to do czystszej historii. Uwaga: W przypadku, gdy już wypchnąłeś swoją drugą gałąź do źródła (lub innego pilota), być może będziesz musiał wymusić wypchnięcie swojej gałęzi po zmianie bazy.
źródło
Zrobiłem
Zamiast
Zgodnie z sugestią @innaM. Kiedy użyłem wersji nadrzędnej, było napisane „fatal: Niepoprawna nazwa obiektu:„ upstream / remote_branch_name ””. Nie zrobiłem
git fetch origin
jako komentarz sugeruje, ale zamiast po prostu zastąpićupstream
zorigin
. Myślę, że są równoważne.źródło
do ściągnięcia gałęzi z GitHub możesz użyć
Upewnij się, że nazwa oddziału jest dokładnie taka sama.
źródło