Разница между git checkout --track origin / branch и git checkout - b филиал происхождение / филиал

кто-нибудь знает разницу между этими двумя командами для переключения и отслеживать удаленный филиал?

git checkout -b branch origin/branch
git checkout --track origin/branch

Я думаю, что оба отслеживают удаленную ветвь, чтобы я мог подтолкнуть свои изменения к ветви в origin, верно?

есть ли какие-либо практические различия??

спасибо!

3 ответов


две команды имеют одинаковый эффект (спасибо ответу Роберта Симера за указание на это).

практическая разница возникает при использовании локальной ветви с именем по-разному:

  • git checkout -b mybranch origin/abranch создать mybranch и трассы origin/abranch
  • git checkout --track origin/abranch только создаст 'abranch', не ветка с другим названием.

(то есть как прокомментировал by Себастьян Граф, если местный филиал сделал не уже существует.
Если бы это было так, вам понадобилось бы git checkout -B abranch origin/abranch)


во-первых, некоторые фона: отслеживание означает, что локальная ветвь имеет свой восходящий набор в удаленную ветвь:

# git config branch.<branch-name>.remote origin
# git config branch.<branch-name>.merge refs/heads/branch

git checkout -b branch origin/branch будет

  • создать/сброс branch к точке, на которую ссылается origin/branch.
  • создать филиал branchgit branch) и отслеживать ветку удаленного отслеживания origin/branch.

когда локальная ветвь запускается с ветви удаленного отслеживания, Git устанавливает ветвь (в частности,branch.<name>.remote и branch.<name>.merge записи настройки), так что git pull будет соответствующим образом объединяться из ветви удаленного отслеживания.
Это поведение может быть изменено с помощью глобальной branch.autosetupmerge флаг конфигурации. Этот параметр можно переопределить с помощью --track и --no-track параметры, а затем изменены с помощью git branch --set-upstream-to.


и git checkout --track origin/branch сделает то же самое:

 # or, since 1.7.0
 git branch --set-upstream branch upstream/branch
 # or, since 1.8.0 (October 2012)
 git branch --set-upstream-to branch upstream/branch
 # the short version remains the same:
 git branch -u branch upstream/branch

это также установило бы восходящее течение для'branch'.

(Примечание: git1.8.0 будет осуждать git branch --set-upstream и заменить git branch -u|--set-upstream-to: см.git1.8.0-rc1 и объявить)


наличие восходящей ветви, зарегистрированной для местной ветви, будет:

  • скажите git показать связь между двумя ветвями в git status и git branch -v.
  • руководит git pull без аргументов вытянуть из вверх, когда новый филиал проверил.

в разделе "как сделать существующую ветку git отслеживать удаленную ветку?" дополнительные.


нет никакой разницы вообще!

1) git checkout -b branch origin/branch

если нет --track и --no-track, --track предполагается по умолчанию. Значение по умолчанию можно изменить с помощью параметра branch.autosetupmerge.

по сути, 1) ведет себя как git checkout -b branch --track origin/branch.

2) git checkout --track origin/branch

"для удобства", --track без -b подразумевает -b и параметр -b предполагается, что это "ветка". Угадывание управляется переменная конфигурации remote.origin.fetch.

в действительности, 2) ведет себя как git checkout -b branch --track origin/branch.

как вы можете видеть: нет разницы.

но становится еще лучше:

3) git checkout branch

эквивалентно git checkout -b branch --track origin/branch если "филиал" еще не существует, но "origin / branch" делает1.


все три команды устанавливают "вверх по течению ""ветви" как "происхождение / ветвь" (или они неудача.)

Upstream используется в качестве опорной точки аргумента git status, git push, git merge и так git pull (если настроено так (что по умолчанию или почти по умолчанию)).

Е. Г. git status говорит вам, как далеко позади или впереди вас вверх, если он настроен.

git push настроен для перемещения текущей ветви вверх по умолчанию2 начиная с git 2.0.

1 ...и если "origin" является единственным удаленным, имеющим "ветвь"
2 значение по умолчанию (с именем "simple") и обеспечивает, чтобы имена обеих ветвей были равны


книги кажется, указывает, что эти команды дают тот же эффект:

простой случай-это пример, который вы только что видели, запустив git checkout-b [ветка] [удал. сервер]/[филиала]. Если у вас есть в Git версии 1.6.2 или позже вы также можете использовать --track shorthand:

$ git checkout --track origin/serverfix 
Branch serverfix set up to track remote branch serverfix from origin. 
Switched to a new branch 'serverfix' 

чтобы Настроить локальную ветвь с другим именем, чем удаленная ветка, вы можете легко использовать первую версию с другим местное отделение имя:

$ git checkout -b sf origin/serverfix

это особенно удобно, когда ваши bash или Oh-my-zsh git completions могут вытащить origin/serverfix имя для вас - просто добавьте --track (или -t) и вы на своем пути.