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>.merge
configuration条目),以便git pull
从远程跟踪分支跟踪分支。
此行为可能会通过全局branch.autosetupmerge
configuration标志更改。 该设置可以通过使用--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
),你就可以继续使用了。