yor*_*rch 196 git branch git-checkout git-branch
有人知道切换和跟踪远程分支这两个命令之间的区别吗?
git checkout -b branch origin/branch
git checkout --track origin/branch
我认为两者都跟踪远程分支,所以我可以将我的更改推送到原点上的分支,对吧?
有什么实际差异吗?
谢谢!
Von*_*onC 260
这两个命令具有相同的效果(感谢Robert Siemer的答案指出它).
使用不同名称的本地分支时会出现实际差异:
git checkout -b mybranch origin/abranch将创建mybranch和跟踪origin/abranchgit checkout --track origin/abranch将只创建' abranch',而不是具有不同名称的分支.(也就是说,正如塞巴斯蒂安·格拉夫所评论的那样,如果当地的分支机构已经不存在了.
如果确实如此,你需要git checkout -B abranch origin/abranch)
首先,一些背景:跟踪意味着本地分支的上游设置为远程分支:
git switch -c <branch> --track <remote>/<branch>
git switch 将:
checkout.defaultRemote到引用的点<branch>.checkout.defaultRemote=origin(带<branch>)并跟踪远程跟踪分支-c.  当本地分支开始了一个远程跟踪分支,GIT中设置分支(特别是
-b和git checkout -b branch origin/branch配置条目),从而branch将适当地从远程跟踪分支合并.
可以通过全局origin/branch配置标志更改此行为.可以使用branch和git branch选项覆盖该设置,稍后使用git branch更改origin/branch.
和branch.<name>.remote会做一样的branch.<name>.merge):
# git config branch.<branch-name>.remote origin
# git config branch.<branch-name>.merge refs/heads/branch
它还会为' git pull' 设置上游.
(注意:git1.8.0将弃用branch.autosetupmerge并替换为--track:请参阅git1.8.0-rc1 announce)
为本地分支注册上游分支将:
--no-track和--set-upstream-to.git checkout --track origin/branch 不带参数的指示从上游拉出.有关更多信息,请参阅" 如何使现有git分支跟踪远程分支? ".
Rob*_*mer 30
完全没有区别!
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如果"branch"还不存在但"origin/branch"的确是1,那也相当于.
所有三个命令都将"branch"的"upstream"设置为"origin/branch"(或者它们失败).
上游被用作参数,以下的参考点git status,git push,git merge并因此git pull(如果配置这样的(这是默认值或几乎默认)).
例如git status,如果配置了上游,请告诉您上游的前后距离.
git push配置为从git 2.0开始默认将当前分支推送到上游2.
1 ...如果"origin"是唯一具有"branch" 2的遥控器,则默认(名为"simple")也强制两个分支名称相等
这本书似乎表明这些命令会产生同样的效果:
简单的例子就是你刚看到的例子,运行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)你正在路上.