Oba polecenia mają ten sam efekt ( dzięki odpowiedzi Roberta Siemera za wskazanie go ).
Praktyczna różnica wynika z używania oddziału lokalnego o innej nazwie :
git checkout -b mybranch origin/abranch
utworzy mybranch
i będzie śledzićorigin/abranch
git checkout --track origin/abranch
utworzy tylko „ abranch
”, a nie gałąź o innej nazwie.
(To znaczy, jak skomentował przez Sebastiana Graf , jeśli lokalny oddział czy nie istnieje.
Jeśli tak, to trzeba git checkout -B abranch origin/abranch
)
Uwaga: w przypadku Git 2.23 (III kwartał 2019 r.) Można by użyć nowego poleceniagit switch
:
git switch -c <branch> --track <remote>/<branch>
Jeśli gałąź istnieje w wielu pilotach, a jeden z nich jest nazwany przez checkout.defaultRemote
zmienną konfiguracyjną, użyjemy tego do celów ujednoznacznienia, nawet jeśli <branch>
nie jest on unikalny dla wszystkich pilotów.
Ustaw na np., checkout.defaultRemote=origin
Aby zawsze kasował zdalne gałęzie stamtąd, jeśli <branch>
jest niejednoznaczny, ale istnieje na zdalnym źródle.
Tutaj -c
„jest nowy -b
”.
Po pierwsze, pewne tło: Śledzenie oznacza, że gałąź lokalna ma swój górny segment ustawiony na gałąź zdalną:
# git config branch.<branch-name>.remote origin
# git config branch.<branch-name>.merge refs/heads/branch
git checkout -b branch origin/branch
będzie:
- utwórz / zresetuj
branch
do punktu, do którego odnosi się origin/branch
.
- utwórz gałąź
branch
(za pomocą git branch
) i śledź gałąź zdalnego śledzenia origin/branch
.
Kiedy gałąź lokalna jest uruchamiana z gałęzi zdalnego śledzenia, Git konfiguruje gałąź (szczególnie wpisy branch.<name>.remote
i branch.<name>.merge
konfiguracyjne), aby git pull
odpowiednio połączyć się z gałęzią zdalnego śledzenia.
To zachowanie można zmienić za pomocą branch.autosetupmerge
flagi konfiguracji globalnej . Że ustawienie może być zmienione za pomocą przycisków --track
i --no-track
opcji, a później zmienić za pomocą git oddział --set-upstream-to
.
I git checkout --track origin/branch
zrobi to samo co git branch --set-upstream-to
):
# or, since 1.7.0
git branch --set-upstream upstream/branch branch
# or, since 1.8.0 (October 2012)
git branch --set-upstream-to upstream/branch branch
# the short version remains the same:
git branch -u upstream/branch branch
Ustawiłoby to również upstream dla „branch
”.
(Uwaga: git1.8.0 przestanie obowiązywać git branch --set-upstream
i zastąpi go git branch -u|--set-upstream-to
: zobacz komunikat git1.8.0-rc1 )
Po zarejestrowaniu oddziału wyższego szczebla dla oddziału lokalnego:
- powiedz git, aby pokazał związek między dwiema gałęziami w
git status
igit branch -v
.
- kieruje
git pull
bez argumentów, aby pobierać z góry, gdy nowy oddział jest wyewidencjonowany .
Zobacz „ Jak sprawić, aby istniejąca gałąź git śledziła gałąź zdalną? ”, Aby uzyskać więcej.
git pull
, podczas gdy niektóre prosiłyby o wyciągnięcie zdalnej gałęzi. Okazuje się, że jeśli po raz pierwszy sprawdzasz zdalną gałąź, którą utworzył twój rówieśnik, git kontynuuje i dodajebranch.<BNAME>.remote=origin
do lokalnego gitconfig. Który następnie pozwala na wydaniegit pull
. Jednak jeśli to ty tworzysz gałąźgit checkout -b BNAME
, git - oczywiście - nie wie. Więc powinieneś określić jego zdalny.