有谁知道这两个命令之间的区别切换和跟踪远程分支机构?
git checkout -b branch origin/branch
git checkout --track origin/branch
我认为无论是跟踪远程分支机构的,所以我可以把我的变化分支上的起源,对不对?
是否有任何实际的差异?
谢谢!
有谁知道这两个命令之间的区别切换和跟踪远程分支机构?
git checkout -b branch origin/branch
git checkout --track origin/branch
我认为无论是跟踪远程分支机构的,所以我可以把我的变化分支上的起源,对不对?
是否有任何实际的差异?
谢谢!
这两个命令具有相同的效果( 感谢罗伯特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>.remote
和branch.<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 status
和git branch -v
。 git pull
不带参数从上游到拉当新的支路被检出 。 请参阅“ 如何使现有的Git分支追踪远程分支? ”了解更多。
有一个在所有没有区别!
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 status
, git push
, git merge
并且因此git pull
(如果配置这样的(这是默认值或几乎默认))。
如git status
将告诉您如何远远落后或提前你的上游,如果配置一个。
git push
被配置成由默认2,因为GIT中2.0上游推当前分支。
1 ...如果“原产地”是唯一的远程有“分支”
2默认(命名为“简单”) 也规定了两个分支名称相等
这本书似乎表明,这些命令产生相同的效果:
最简单的情况是,你刚才看到的例子,运行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
),你对你的方式。
您不能创建一个新的分支使用该命令
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