git checkout –track origin / branch和git checkout -b branch origin / branch之间的区别
有人知道这两个命令切换和跟踪远程分支之间的区别吗?
git checkout -b branch origin/branch git checkout --track origin/branch
我想都跟踪远程分支,所以我可以将我的更改推到原产地的分支,对不对?
有没有实际的区别?
谢谢!
这两个命令具有相同的效果( 感谢Robert Siemer的指出 )。
实际的区别是使用不同的本地分支:
-
git checkout -b mybranch origin/abranch会创buildmybranch并追踪origin/abranch -
git checkout --track origin/abranch只会创build“abranch”,而不是具有不同名称的分支。
首先,一些背景: 跟踪意味着本地分支的上游设置为远程分支:
# git config branch.<branch-name>.remote origin # git config branch.<branch-name>.merge refs/heads/branch
git checkout -b branch origin/branch会
- 创build/重置
branch到origin/branch引用的点。 - 创build分支
branch(使用git branch)并跟踪远程跟踪分支的origin/branch。
当一个本地分支从远程跟踪分支启动时,Git设置分支(特别是
branch.<name>.remote和branch.<name>.mergeconfiguration条目),以便git pull从远程跟踪分支跟踪分支。
此行为可能会通过全局branch.autosetupmergeconfiguration标志更改。 该设置可以通过使用--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并将其replace为git branch -u|--set-upstream-to :请参阅git1.8.0-rc1 announce )
有一个上游分支注册为本地分支将会:
- 告诉git 显示在
git status和git branch -v两个分支之间的关系 。 - 当检出新分支时,指示不带参数的
git pull从上游拉取 。
有关更多信息,请参阅“ 如何使现有的git分支跟踪远程分支? ”。
根本没有区别!
1) git checkout -b branch origin/branch
如果没有--no-track和没有--no-track无--no-track , --no-track被认为是默认的。 默认值可以通过设置branch.autosetupmerge进行更改。
实际上,1)的行为就像git checkout -b branch --track origin/branch 。
2) git checkout --track origin/branch
“作为一种方便”, --track没有-b --track暗示-b ,而-b的参数被猜测为“分支”。 猜测是由configurationvariablesremote.origin.fetch驱动的。
实际上,2)就像git checkout -b branch --track origin/branch 。
正如你所看到的:没有区别。
但它变得更好:
3) git checkout branch
也相当于git checkout -b branch --track origin/branch如果“branch”还不存在,但是“origin / branch”会做1 。
所有这三个命令都将“分支”的“上游”设置为“起始/分支”(或者它们失败)。
上游用作无参数的git status , git push , git merge和git pull参考点(如果像这样configuration(这是默认的或几乎默认的))。
例如git status告诉你,如果你configuration了一个上游或下游,你就有多远。
git push被configuration为从git 2.0开始默认推送当前分支。
1 …并且如果“起源”是唯一具有“分支”
2默认(名为“简单”) 也强制两个分支名称相等
这本书似乎表明,这些命令产生相同的效果:
简单的例子就是刚刚看到的例子,运行git checkout -b [branch] [remotename] / [branch]。 如果你有Git 1.6.2或更高版本,你也可以使用–track简写:
$ 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完成能够为你提供origin/serverfix名字的时候,这个特别方便 – 只需追加--track (或者-t ),你就可以继续使用了。