Разница между 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
. - создать филиал
branch
(Сgit 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
) и вы на своем пути.