Sprawić, by istniejąca gałąź Git śledziła zdalną gałąź?
Wiem jak stworzyć nową gałąź, która śledzi odległe gałęzie, ale Jak sprawić, by istniejąca gałąź śledziła odległą gałąź?
Wiem, że mogę po prostu edytować plik .git/config
, ale wydaje się, że powinien być łatwiejszy sposób.
19 answers
Dany oddział foo
i zdalny upstream
:
Od Git 1.8.0:
git branch -u upstream/foo
Lub, jeśli lokalna gałąź foo
nie jest bieżącą gałęzią:
git branch -u upstream/foo foo
Lub, jeśli lubisz wpisywać dłuższe polecenia, są one równoważne dwóm powyższym:
git branch --set-upstream-to=upstream/foo
git branch --set-upstream-to=upstream/foo foo
Od Git 1.7.0:
git branch --set-upstream foo upstream/foo
Uwagi:
Wszystkie powyższe polecenia spowodują, że lokalna gałąź foo
będzie śledzić zdalną gałąź foo
ze zdalnej upstream
. Stary (1.7.x) składnia jest przestarzała na rzecz nowej składni (1.8+). Nowa składnia ma być bardziej intuicyjna i łatwiejsza do zapamiętania.
Zobacz także: Dlaczego muszę robić` -- set-upstream ' cały czas?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:34
Możesz wykonać następujące czynności (zakładając, że jesteś sprawdzony na master i chcesz przejść do zdalnego Master gałęzi):
Skonfiguruj 'pilota', jeśli go jeszcze nie masz
git remote add origin ssh://...
Teraz skonfiguruj master, aby wiedział, aby śledzić:
git config branch.master.remote origin
git config branch.master.merge refs/heads/master
I wcisnąć:
git push origin master
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-28 20:20:49
Robię to jako efekt uboczny pchania z opcją -u
jak w
$ git push -u origin branch-name
Odpowiednikiem długiej opcji jest --set-upstream
.
Komenda git-branch
rozumie również --set-upstream
, ale jej użycie może być mylące. Wersja 1.8.0 modyfikuje interfejs.
git branch --set-upstream
jest przestarzały i może zostać usunięty w stosunkowo odległej przyszłości.git branch [-u|--set-upstream-to]
został wprowadzony z saner kolejność argumentów.…
Kuszące było powiedzenie
git branch --set-upstream origin/master
, ale to mówi Gitowi, aby zorganizował lokalną gałąź "origin / master" w celu integracji z aktualnie sprawdzoną gałąź, co jest wysoce nieprawdopodobne, co użytkownik miał na myśli. Ta opcja jest przestarzała; zamiast tego użyj nowej opcji--set-upstream-to
(z krótkim i słodkim-u
).
Powiedzmy, że masz lokalną gałąź foo
i chcesz, aby traktowała gałąź o tej samej nazwie, co jej źródło. Make this happen with
$ git branch foo
$ git branch --set-upstream-to=origin/foo
Lub po prostu
$ git branch --set-upstream-to=origin/foo foo
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-20 12:42:50
Możesz znaleźć git_remote_branch
narzędzie przydatne. Oferuje proste polecenia do tworzenia, publikowania, usuwania, śledzenia i zmiany nazw zdalnych oddziałów. Jedną z ciekawych funkcji jest to, że możesz poprosić grb
o wyjaśnienie, jakie polecenia git mógłby wykonać.
grb explain create my_branch github
# git_remote_branch version 0.3.0
# List of operations to do to create a new remote branch and track it locally:
git push github master:refs/heads/my_branch
git fetch github
git branch --track my_branch github/my_branch
git checkout my_branch
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-28 16:36:15
Faktycznie za zaakceptowaną odpowiedź do pracy:
git remote add upstream <remote-url>
git fetch upstream
git branch -f --track qa upstream/qa
# OR:
git branch --set-upstream qa upstream/qa
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-28 16:33:27
Wierzę, że już w Git 1.5.x możesz sprawić, że lokalna gałąź $BRANCH
będzie śledzić zdalną gałąź origin/$BRANCH
, w ten sposób.
Biorąc pod uwagę, że $BRANCH
i origin/$BRANCH
istnieją, a obecnie nie sprawdzałeś $BRANCH
(Wyłącz jeśli masz), wykonaj:
git branch -f --track $BRANCH origin/$BRANCH
To odtwarza $BRANCH
jako gałąź śledzącą. -f
wymusza tworzenie pomimo $BRANCH
istniejących już. --track
jest opcjonalne, jeśli standardowe wartości domyślne są ustawione (tzn. parametr git-config branch.autosetupmerge
jest true).
Uwaga, Jeśli origin/$BRANCH
jeszcze nie istnieje, możesz go utworzyć, wpychając lokalne $BRANCH
do zdalnego repozytorium za pomocą:
git push origin $BRANCH
Po którym następuje poprzednie polecenie, aby promować lokalną gałąź w gałąź śledzącą.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-28 16:35:24
1-Zaktualizuj swoje lokalne metadane używając : git fetch --all
2-pokaż swoje zdalne i lokalne gałęzie używając : git branch-a , zobacz poniższy zrzut ekranu
3-przełącz się na gałąź docelową, którą chcesz połączyć z pilotem: używając
Git checkout branchName
Przykład:
4-Połącz swoją lokalną gałąź ze zdalną za pomocą:
Git branch --set-upstream - to nameOfRemoteBranch
Uwaga: nameOfRemoteBranch : Kopiowanie z wyjścia kroku 2 " Git branch -r "
Przykład użycia:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-15 23:39:54
Upewnij się, że biegniesz:
git config push.default tracking
Aby móc bezproblemowo naciskać
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-08 22:59:18
Edycja .git/config
jest prawdopodobnie najłatwiejszym i najszybszym sposobem. Tak właśnie robią polecenia Git do obsługi zdalnych gałęzi.
Jeśli nie chcesz ręcznie brudzić pliku (i nie jest to takie trudne), zawsze możesz użyć git config
, aby to zrobić...ale i tak po prostu edytuje plik .git/config
.
Istnieją oczywiście sposoby automatycznego śledzenia zdalnej gałęzi przy użyciu git checkout
(na przykład przez podanie flagi --track
), ale te polecenia działają z nowe gałęzie, nieistniejące.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-06 15:17:54
W bardzo krótkim
git branch --set-upstream yourLocalBranchName origin/develop
To sprawi, że twoja yourLocalBranchName
wyśledzi zdalną gałąź o nazwie develop
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-31 18:33:37
Dla 1.6.x, można to zrobić używając narzędzia git_remote_branch :
grb track foo upstream
To spowoduje, że Git utworzy foo
ścieżkę upstream/foo
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-09 11:05:30
Tutaj, używając github
i git version 2.1.4
, po prostu zrób:
$ git clone [email protected]:user/repo.git
I piloty przychodzą przez itelsef, nawet jeśli nie są połączone lokalnie:
$ git remote show origin
* remote origin
Fetch URL: [email protected]:user/repo.git
Push URL: [email protected]:user/repo.git
HEAD branch: master
Remote branches:
develop tracked <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
master tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
Ale oczywiście nadal nie ma lokalnego oddziału:
$ git branch
* master <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Widzisz? Teraz, jeśli tylko dokonasz zakupu develp, zrobi magię automatycznie: {]}
$ git checkout develop
Branch develop set up to track remote branch develop from origin.
Switched to a new branch 'develop'
Tak łatwo!
Podsumowanie. po prostu uruchom te 2 komendy:
$ git clone [email protected]:user/repo.git
$ git checkout develop
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-29 23:04:57
Użyj opcji '--track '
-
Po
git pull
:git checkout --track <remote-branch-name>
-
Lub:
git fetch && git checkout <branch-name>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-27 08:56:37
Do stworzenia nowej gałęzi możemy użyć następującego polecenia
git checkout --track -b example origin/exampleAby już utworzona gałąź utworzyła łącze pomiędzy zdalnym, a następnie z tej gałęzi użyj poniższego polecenia
git branch -u origin/remote-branch-name
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-20 10:24:24
W nieco podobny sposób próbowałem dodać zdalną gałąź ś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ę zdalną gałąź śledzenia (ponieważ często eksportuję kopię tego repo przez sneakernet do innego systemu, który ma dostęp do push do tego zdalnego). Odkryłem, że nie ma sposobu, aby wymusić dodanie zdalnej gałęzi na lokalnym, która nie została jeszcze pobrana (więc local nie wiedział, że gałąź istnieje na pilot i ja dostałbym błąd: the requested upstream branch 'origin/remotebranchname' does not exist
).
W koĹ "cu udaĹ' o mi siÄ ™ dodaÄ ‡ nowÄ..., nieznanÄ ... wczeĹ "niej odlegĹ' Ä ... GaĹ 'Ä ™ (bez pobierania) przez dodanie nowego pliku gĹ' Ăłwnego w .git/refs/remotes/origin/remotebranchname
, a nastÄ ™ pnie skopiowaÄ ‡ ref (oglÄ ... danie byĹ 'o najszybsze, kulawe jak byĹ' o ;-) z systemu z dostÄ ™ pem do repo origin do stacji roboczej (z lokalnym repo, w ktĂłrym doĹ 'Ä ... czyĹ' em zdalnÄ ... GaĹ ' Ä™).
Kiedy już to zrobiono, mogłem użyć git branch --set-upstream-to=origin/remotebranchname
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-24 03:45:47
Używam następującego polecenia (Załóżmy, że Twoja lokalna gałąź to "branch-name-local", a zdalna to "branch-name-remote"):
$ git branch --set-upstream-to=origin/branch-name-remote branch-name-local
Jeśli zarówno lokalne, jak i zdalne gałęzie mają tę samą nazwę, wykonaj następujące czynności:
$ git branch --set-upstream-to=origin/branch-name branch-name
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-12 10:03:31
To nie jest bezpośrednia odpowiedź na to pytanie, ale chciałem zostawić notatkę dla każdego, kto może mieć ten sam problem co ja podczas próby skonfigurowania gałęzi upstream.
Bądź ostrożny przyj.default .
W starszych wersjach Gita, domyślną wartością było dopasowanie , co powodowałoby bardzo niepożądane zachowanie, na przykład:
Local branch "master" tracking to origin / master
Remote branch" upstream " tracking to upstream / master
Jeśli próbowałeś "git push" kiedy w gałęzi "upstream", używając push.domyślne dopasowanie git automatycznie spróbuje połączyć lokalną gałąź "master" z "upstream / master", powodując chaos.
To daje bardziej rozsądne zachowanie:
Git config --global push.default upstream
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-21 12:53:42
Lub po prostu przez:
Przełącz się na gałąź, jeśli jeszcze w niej nie jesteś:
[za]$ git checkout branch_name
Run
[za]$ git branch --set-upstream origin branch_name
Branch origin set up to track local branch brnach_name by rebasing.
I jesteś gotowy:
[za]$ git push origin branch_name
Możesz zajrzeć do pliku konfiguracyjnego, aby zobaczyć, co śledzi co, uruchamiając:
[za]$ git config -e
Miło jest to wiedzieć, pokazuje, które gałęzie są śledzone, a które nie. :
[za]$ git remote show origin
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-22 01:43:47
To też by zadziałało
git branch --set-upstream-to=/< remote>/< branch> < localbranch>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-22 17:03:05