Wiem, jak utworzyć nową gałąź, która śledzi gałęzie zdalne, ale jak sprawić, aby istniejąca gałąź śledziła gałąź zdalną?
Wiem, że mogę po prostu edytować .git/config
plik, ale wydaje się, że powinien istnieć łatwiejszy sposób.
git
branch
git-branch
Pat Notz
źródło
źródło
git push -u origin branch-name
.git pull
często dostarcza pomocnych komunikatów o odpowiednim poleceniu do ustawienia informacji o śledzeniugit branch --set-upstream-to origin/<branch>
--set-upstream
powoduje błąd:fatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.
takgit branch --set-upstream-to origin/<branch name>
działa bieżące polecenie.Odpowiedzi:
Biorąc pod uwagę oddział
foo
i pilotaupstream
:Począwszy od Git 1.8.0:
Lub, jeśli oddział lokalny
foo
nie jest bieżącym oddziałem:Lub, jeśli chcesz wpisać dłuższe polecenia, są one równoważne dwóm powyższym:
Od wersji Git 1.7.0:
Uwagi:
foo
śledzi oddziałfoo
zdalny ze zdalnegoupstream
.git fetch upstream
wcześniej.Zobacz także: Dlaczego muszę cały czas robić `--set-upstream`?
źródło
git branch --set-upstream master origin/master
byłoby równoważne z tym, co jest automatycznie wykonywane, gdy początkowo klonujesz repozytorium.git push -u origin foo
viaMożesz wykonać następujące czynności (zakładając, że jesteś wyewidencjonowany w systemie głównym i chcesz przekazać go do zdalnego oddziału głównego):
Ustaw „zdalny”, jeśli jeszcze go nie masz
Teraz skonfiguruj master, aby wiedział, aby śledzić:
I naciśnij:
źródło
error: the requested upstream branch 'upstream/master' does not exist
.origin
a nieupstream
.Robię to jako efekt uboczny pchania z
-u
opcją jak wOdpowiednia długa opcja to
--set-upstream
.git-branch
Polecenie rozumie także--set-upstream
, ale jego stosowanie może być mylące. Wersja 1.8.0 modyfikuje interfejs.Załóżmy, że masz
foo
oddział lokalny i chcesz, aby oddział traktował tę samą nazwę, co jego gałąź nadrzędna. Niech to się stanieLub tylko
źródło
--set-upstream-to=...
właśnie tego szukałem.git_remote_branch
Narzędzie może być przydatne. Oferuje proste polecenia do tworzenia, publikowania, usuwania, śledzenia i zmiany nazw zdalnych oddziałów. Jedną fajną cechą jest to, że możesz poprosićgrb
polecenie o wyjaśnienie, jakie polecenia git wykona.źródło
Właściwie dla zaakceptowanej odpowiedzi zadziałało:
źródło
Wierzę, że już w Git 1.5.x można uczynić lokalną gałąź śledzącą gałąź
$BRANCH
zdalnąorigin/$BRANCH
, taką jak ta.Biorąc to pod uwagę
$BRANCH
iorigin/$BRANCH
istnieje, a obecnie nie wymeldowałeś się$BRANCH
(jeśli tak, to zrezygnuj):To odtwarza się
$BRANCH
jako gałąź śledzenia. W-f
Wymusza utworzenie mimo$BRANCH
już istniejących.--track
jest opcjonalny, jeśli obowiązują standardowe wartości domyślne (tzn. parametr git-configbranch.autosetupmerge
ma wartość true).Uwaga: jeśli
origin/$BRANCH
jeszcze nie istnieje, możesz go utworzyć, wypychając lokalny$BRANCH
serwer do zdalnego repozytorium za pomocą:Następuje poprzednie polecenie, aby wypromować oddział lokalny w oddział śledzenia.
źródło
git push origin $BRANCH
tego szukałem.git branch -f --track $BRANCH origin/$BRANCH
załatwia sprawę.1- zaktualizuj lokalne metadane, używając: git fetch --all
2- pokaż swoje zdalne i lokalne oddziały za pomocą: git branch -a , zobacz następujący zrzut ekranu
3 - przejdź do gałęzi docelowej, którą chcesz połączyć ze zdalnym: za pomocą
git checkout branchName
przykład:
4- Połącz swój oddział lokalny ze zdalnym oddziałem, używając:
gałąź git --set-upstream-to nameOfRemoteBranch
NB: nameOfRemoteBranch : aby skopiować dane wyjściowe z kroku 2 „git branch -r”
Przykład zastosowania:
źródło
Upewnij się, że biegniesz:
aby móc bezproblemowo przepychać
źródło
git-config(1)
strony podręcznikatracking
jest to przestarzały synonimupstream
.Edycja
.git/config
jest prawdopodobnie najłatwiejszym i najszybszym sposobem. W każdym razie tak robią polecenia Git do obsługi zdalnych gałęzi.Jeśli nie chcesz ręcznie wycierać pliku (i nie jest to trudne), zawsze możesz
git config
to zrobić ... ale znowu, i tak będzie to po prostu edycja.git/config
pliku.Istnieją oczywiście sposoby automatycznego śledzenia zdalnej gałęzi podczas używania
git checkout
(--track
na przykład poprzez przekazanie flagi), ale te polecenia działają z nowymi gałęziami, nieistniejącymi.źródło
W skrócie
To sprawi, że twoja
yourLocalBranchName
ścieżka będzie nazywała się zdalną gałąźdevelop
.źródło
git push -u origin branch
(lub--set-upstream-to
)--set-upstream
i--track
? Nie do końca rozumiem, dlaczego powinienem używać jednego nad drugim.W wersji 1.6.x można to zrobić za pomocą narzędzia git_remote_branch :
To spowoduje, że Git zacznie
foo
śledzićupstream/foo
.źródło
Używam następującego polecenia (załóżmy, że twoja nazwa oddziału lokalnego to „nazwa oddziału lokalnego”, a nazwa oddziału zdalnego to „nazwa oddziału zdalnego”):
Jeśli zarówno oddziały lokalne, jak i zdalne mają tę samą nazwę, wykonaj następujące czynności:
źródło
Tutaj, używając
github
igit version 2.1.4
po prostu wykonaj:I piloty pochodzą od itelsef, nawet jeśli nie są powiązane lokalnie:
Ale oczywiście nadal nie ma lokalnego oddziału:
Widzieć? Teraz, jeśli tylko wyewidencjonujesz develp, zrobi magię automatycznie:
Tak łatwo!
Podsumowanie. Wystarczy uruchomić 2 polecenia:
źródło
Użyj opcji „--track”
Po
git pull
:git checkout --track <remote-branch-name>
Lub:
git fetch && git checkout <branch-name>
źródło
Do utworzenia nowego oddziału możemy użyć następującego polecenia
Aby już utworzony oddział utworzyć łącze między zdalnym a tym z tego oddziału, użyj poniższego poleceniaźródło
To nie jest bezpośrednia odpowiedź na to pytanie, ale chciałem zostawić tutaj notatkę dla każdego, kto może mieć taki sam problem jak ja, próbując skonfigurować odgałęzienie.
Uważaj na push.default .
W starszych wersjach git domyślnie pasowało , co spowodowałoby bardzo niepożądane zachowanie, jeśli masz na przykład:
Śledzenie „głównego” oddziału lokalnego do źródła / wzorca
Zdalne śledzenie gałęzi „upstream” do upstream / master
Jeśli spróbujesz „git push” w gałęzi „upstream”, z dopasowaniem push.default git automatycznie spróbuje połączyć lokalną gałąź „master” w „upstream / master”, powodując cały chaos.
To daje bardziej rozsądne zachowanie:
git config --global push.default w górę
źródło
W nieco pokrewny sposób próbowałem dodać gałąź do zdalnego śledzenia do istniejącej gałęzi, ale nie miałem dostępu do tego zdalnego repozytorium w systemie, w którym chciałem dodać tę gałąź do zdalnego śledzenia (ponieważ często eksportuję kopię tego repo przez sneakernet do innego systemu, który ma dostęp do wypychania tego zdalnego). Odkryłem, że nie było sposobu, aby wymusić dodanie zdalnej gałęzi do lokalnego, który nie został jeszcze pobrany (więc lokalny nie wiedział, że gałąź istnieje na zdalnym, i otrzymam błąd:)
the requested upstream branch 'origin/remotebranchname' does not exist
.W końcu udało mi się dodać nową, nieznaną wcześniej gałąź zdalną (bez pobierania), dodając nowy plik head na,
.git/refs/remotes/origin/remotebranchname
a następnie kopiując ref (gałka oczna była najszybsza, lamała ;-) z systemu z dostępem do źródła repozytorium na stacji roboczej (z repozytorium lokalnym, na którym dodawałem gałąź zdalną).Gdy to zrobiono, mogłem użyć
git branch --set-upstream-to=origin/remotebranchname
źródło
lub po prostu przez:
przejdź do oddziału, jeśli jeszcze go nie masz:
biegać
i jesteś gotowy do:
Możesz zawsze spojrzeć na plik konfiguracyjny, aby zobaczyć, co śledzi, uruchamiając:
Miło też to wiedzieć, pokazuje, które gałęzie są śledzone, a które nie. :
źródło
Dla każdego, kto podobnie jak ja chce zsynchronizować nazwę oddziału lokalnego ze zdalną nazwą oddziału, oto przydatne polecenie:
źródło
Aby uniknąć zapamiętywania, co musisz zrobić za każdym razem, gdy otrzymasz wiadomość:
Możesz użyć następującego skryptu, który ustawia początek jako nadrzędny dla bieżącej gałęzi, w której się znajdujesz.
W moim przypadku prawie nigdy nie ustawiłem czegoś innego niż pochodzenie jako domyślny upstream . Również prawie zawsze zachowuję tę samą nazwę oddziału dla oddziału lokalnego i zdalnego. Tak więc pasują do mnie:
źródło
To też by działało
źródło