Śledź nową zdalną gałąź utworzoną w GitHub

183

Mam już lokalną gałąź główną śledzącą zdalną gałąź główną projektu github. Teraz mój współpracownik utworzył nowy oddział w tym samym projekcie i chcę odpowiednio wykonać następujące czynności:

  1. utwórz nowy oddział lokalnie
  2. spraw, aby ta nowa gałąź śledziła nowo utworzoną gałąź zdalną.

Jak mam to zrobić poprawnie?

MLister
źródło
2
git checkout --track -b <gałąź lokalna> <remote> / <gałąź śledzona> również działa.
MLister
14
... lub po prostu git checkout -t <remote>/<whatever>. Jeśli kończy się tylko jedna gałąź zdalnego śledzenia, <whatever>możesz nawet zrobić git checkout <whatever>i zgadnąć, co masz na myśli.
Mark Longair,

Odpowiedzi:

251
git fetch
git branch --track branch-name origin/branch-name

Pierwsze polecenie upewnia się, że masz zdalną gałąź w lokalnym repozytorium. Drugie polecenie tworzy gałąź lokalną, która śledzi gałąź zdalną. Zakłada się, że Twoja zdalna nazwa to origini nazwa oddziału branch-name.

--track opcja jest domyślnie włączona dla zdalnych oddziałów i można ją pominąć.

max
źródło
3
Kiedy to robię, pojawia się ostrzeżenie: zmiana nazwy „nazwa-gałęzi” jest niejednoznaczna.
Ultrasaurus
19
Jeśli istnieje tylko jedna gałąź zdalna o tej nazwie, możesz to zrobić, git checkout <branchname>a git automatycznie ją sprawdzi i skonfiguruje gałąź śledzenia. Chciałem tylko powtórzyć to, co @ Mark Longair powiedział powyżej w tym komentarzu: stackoverflow.com/questions/11262703/… .
Ryan Walls
Nazwa mojego zdalnego oddziału to remotes/origin/develop? Czy nie powinno tak być origin/develop? Czy to są te same?
ア レ ッ ク ス
2
Musiałem to zrobić git fetch --all, w przeciwnym razie nowe oddziały nie byłyby pobierane
mschrimpf
Jak to zrobić w Eclipse? Kiedy skończę z tym cmd, zaćmienie wykryje nową gałąź?
Deckard
31

Jeśli nie masz istniejącego oddziału lokalnego, jest to naprawdę tak proste, jak:

git fetch
git checkout <remote-branch-name>

Na przykład, jeśli pobierasz i istnieje nowa gałąź zdalnego śledzenia o nazwie origin/feature/Main_Page, po prostu wykonaj następujące czynności:

git checkout feature/Main_Page

To tworzy gałąź lokalną o tej samej nazwie co gałąź zdalna, śledząc tę ​​gałąź zdalną. Jeśli masz wiele pilotów o tej samej nazwie oddziału, możesz użyć mniej dwuznacznych:

git checkout -t <remote>/<remote-branch-name>

Jeśli masz już lokalną gałąź i nie chcesz jej usuwać, zobacz Jak sprawić, aby istniejąca gałąź Git śledziła gałąź zdalną? .

kotoole
źródło
1
git checkout 1.5-branch( remotes/upstream/1.5-branchjest na wyjściu git branch -a) powoduje, że error: pathspec '1.5-branch' did not match any file(s) known to git.zmiana tego ustawienia na git checkout upstream/1.5-branchodłączony HEAD nie powoduje utworzenia lokalnego oddziału. Myślę, że ta część odpowiedzi jest po prostu błędna. To jest z git 2.4.3
Piotr Dobrogost
Pierwsze polecenie działa dla mnie w git 1.9.3, nawet dla różnych pilotów. Możliwe, że to zachowanie się zmieniło. Wynik twojego drugiego polecenia jest tym, czego bym się spodziewał. Bez -t nie określasz, że chcesz robić cokolwiek innego niż patrzeć na tę konkretną wersję na pilocie.
kotoole
1
Zgadzam się z @PiotrDobrogost, uważam, że twoje stwierdzenie „Tworzy lokalny oddział o tej samej nazwie ...” jest błędne. Co pobierać będzie zrobić (gdy nazywa ten sposób) jest stworzenie zdalnego śledzenia oddział dla każdej gałęzi na pilocie. Oznacza to oddział w lokalnym repozytorium o nazwie <remote>/<branch>. Zdalna gałąź śledzenia jest tylko do odczytu, co wskazuje, gdzie gałąź ta znajdowała się na zdalnym podczas ostatniego pobierania. Wezwanie checkoutdo tego oddziału powoduje przejście do trybu HEAD odłączonego, tak jak mówi Piotr. Pamiętaj, że określenie zdalnej gałęzi do pobrania pozwala uniknąć tworzenia niepożądanych gałęzi zdalnego śledzenia.
scanny
2
Aby jeszcze raz wyjaśnić: sugeruję użycie polecenia git checkout feature-branch. NIE sugeruję używania polecenia, git checkout origin/feature-branch które, jak oboje zauważyliście, spowoduje nieprzydatną odłączoną głowę.
kotoole
o wiele prostsze i do rzeczy. Działa dobrze z git 2.8.3 na cygwin.
Felipe Alvarez
29

Przede wszystkim musisz pobrać zdalne repozytorium:

git fetch remoteName

Następnie możesz utworzyć nowy oddział i skonfigurować go, aby śledził żądany oddział zdalny:

git checkout -b newLocalBranch remoteName/remoteBranch

Możesz także użyć „git branch --track” zamiast „git checkout -b”, jak podano maks.

git branch --track newLocalBranch remoteName/remoteBranch
Anghel Contiu
źródło
Jeśli checkout -bużywasz zdalnej gałęzi jako punktu początkowego, to w rzeczywistości nie jest konieczne użycie --track.
5
Ponadto, jak wskazano w tym komentarzu , jeśli po prostu to zrobisz git checkout <branchname>, i istnieje gałąź zdalna o tej samej nazwie (po wykonaniu tej czynności git fetch), gałąź lokalna zostanie automatycznie skonfigurowana do śledzenia tej zdalnej.
9

Gdy gałąź nie jest gałęzią zdalną, możesz przekazać gałąź lokalną bezpośrednio do pilota.

git checkout master
git push origin master

lub kiedy masz gałąź deweloperską

git checkout dev
git push origin dev

lub gdy istnieje gałąź zdalna

git branch dev -t origin/dev

Istnieje kilka innych posibilitów do wypychania zdalnej gałęzi.

René Höhle
źródło
Następnie weź trzecią opcję. Gdy gałąź zdalna istnieje, możesz utworzyć gałąź lokalną i śledzić gałąź zdalną :) jest taka sama jak wersja od maks., Ale krótsza.
René Höhle