git的结帐--track产地/支和git结帐-b分支来源/分支之间的差异git的结帐--track

2019-05-13 10:01发布

有谁知道这两个命令之间的区别切换和跟踪远程分支机构?

git checkout -b branch origin/branch
git checkout --track origin/branch

我认为无论是跟踪远程分支机构的,所以我可以把我的变化分支上的起源,对不对?

是否有任何实际的差异?

谢谢!

Answer 1:

这两个命令具有相同的效果( 感谢罗伯特Siemer的回答指点出来 )。

使用不同的名称本地分支时,实际差别来了:

  • git checkout -b mybranch origin/abranch将创建mybranch和跟踪origin/abranch
  • git checkout --track origin/abranch只会造成“ abranch ”,而不是一个具有不同名称的分支。

(也就是说, 作为评论的塞巴斯蒂安·格拉夫 ,如果本地分支存在。
如果那样,你将需要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>.remotebranch.<name>.merge配置条目),使得git pull将适当地从合并的远程跟踪分支。
此行为可能通过全局改变branch.autosetupmerge配置标志。 该设置可以通过使用覆盖--track--no-track选项以后使用GIT中分支,并改变--set-upstream-to


git checkout --track origin/branch会做一样git branch --set-upstream-to ):

 # or, since 1.7.0
 git branch --set-upstream upstream/branch branch
 # or, since 1.8.0 (October 2012)
 git branch --set-upstream-to upstream/branch branch
 # the short version remains the same:
 git branch -u upstream/branch branch

这也将设置为上游的“ branch ”。

(注:git1.8.0将弃用git branch --set-upstream ,取而代之的是git branch -u|--set-upstream-to :看到git1.8.0-RC1发布 )


具有本地将分公司登记在册的上游分支:

  • 让Git 显示在两个分支之间的关系git statusgit branch -v
  • 引导git pull 不带参数从上游到拉当新的支路被检出

请参阅“ 如何使现有的Git分支追踪远程分支? ”了解更多。



Answer 2:

有一个在所有没有区别!

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 ,如果“分支”尚不存在,但“出身/分支”做1。


所有三个命令设置的“上游”的“分支”是“原点/分支”(或他们失败)。

上游被用作自变量无参考点git statusgit pushgit merge并且因此git pull (如果配置这样的(这是默认值或几乎默认))。

git status将告诉您如何远远落后或提前你的上游,如果配置一个。

git push被配置成由默认2,因为GIT中2.0上游推当前分支。

1 ...如果“原产地”是唯一的远程有“分支”
2默认(命名为“简单”) 规定两个分支名称相等



Answer 3:

这本书似乎表明,这些命令产生相同的效果:

最简单的情况是,你刚才看到的例子,运行git结帐-b [分支名] [远程名] / [分支。 如果你的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 ),你对你的方式。



Answer 4:

您不能创建一个新的分支使用该命令

git checkout --track origin/branch

如果你有没有改变上演。

下面是例子:

$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   src/App.js

no changes added to commit (use "git add" and/or "git commit -a")

// TRY TO CREATE:

$ git checkout --track origin/new-branch
fatal: 'origin/new-branch' is not a commit and a branch 'new-branch' cannot be created from it

但是,您可以轻松地创建带有未改变上演一个新的分支git checkout -b命令:

$ git checkout -b new-branch
Switched to a new branch 'new-branch'
M       src/App.js


文章来源: Difference between git checkout --track origin/branch and git checkout -b branch origin/branch