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/abranchutworzy mybranchi będzie śledzićorigin/abranch
git checkout --track origin/abranchutworzy 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.defaultRemotezmienną 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=originAby 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
branchdo 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>.remotei branch.<name>.mergekonfiguracyjne), aby git pullodpowiednio połączyć się z gałęzią zdalnego śledzenia.
To zachowanie można zmienić za pomocą branch.autosetupmergeflagi konfiguracji globalnej . Że ustawienie może być zmienione za pomocą przycisków --tracki --no-trackopcji, a później zmienić za pomocą git oddział --set-upstream-to.
I git checkout --track origin/branchzrobi 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-upstreami 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 statusigit 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=origindo 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.