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.

Author: Pat Notz, 2009-02-06

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?

 3822
Author: Dan Moulding,
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
 213
Author: Paul Hedderly,
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
 133
Author: Greg Bacon,
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
 51
Author: James Mead,
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
 49
Author: Hedgehog,
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ą.

 42
Author: wu-lee,
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

Tutaj wpisz opis obrazka

2-pokaż swoje zdalne i lokalne gałęzie używając : git branch-a , zobacz poniższy zrzut ekranu

Tutaj wpisz opis obrazka

3-przełącz się na gałąź docelową, którą chcesz połączyć z pilotem: używając

Git checkout branchName

Przykład:

Tutaj wpisz opis obrazka

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:

Tutaj wpisz opis obrazka

 29
Author: Monsif EL AISSOUSSI,
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ć

 22
Author: romanlv,
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.

 21
Author: mipadi,
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.

 16
Author: MadNik,
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.

 14
Author: wik,
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
 8
Author: Dr Beco,
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>

 7
Author: Loukan ElKadi,
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/example 
Aby 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
 6
Author: jithu reddy,
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

 4
Author: Ville,
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
 4
Author: yrazlik,
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

 3
Author: Tom Mettam,
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 
 3
Author: zee,
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>
 -1
Author: Abhi,
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