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/重置branchorigin/branch引用的点。
  • 创build分支branch (使用git branch )并跟踪远程跟踪分支的origin/branch

当一个本地分支从远程跟踪分支启动时,Git设置分支(特别是branch.<name>.remotebranch.<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 statusgit 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 statusgit pushgit mergegit 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 ),你就可以继续使用了。