3 回答
TA贡献1799条经验 获得超9个赞
这两个命令具有相同的效果(感谢Robert Siemer的答案,指出它)。
使用不同名称的本地分支时会出现实际差异:
git checkout -b mybranch origin/abranch
将创建mybranch
和跟踪origin/abranch
git checkout --track origin/abranch
将只创建'abranch
',而不是具有不同名称的分支。
(也就是说,正如塞巴斯蒂安·格拉夫所评论的那样,如果当地的分支机构已经不存在了。
如果确实如此,你需要git checkout -B abranch origin/abranch
)
注意:使用Git 2.23(Q9 2019),将使用新命令git switch
:
git switch -c <branch> --track <remote>/<branch>
如果分支存在于多个遥控器中,并且其中一个由
checkout.defaultRemote
配置变量命名,我们将使用该分支用于消除歧义,即使它<branch>
在所有遥控器中都不是唯一的。
将其设置为例如checkout.defaultRemote=origin
,如果<branch>
不明确但始终存在于“origin”遥控器上,则始终从那里检出远程分支。
在这里,' -c
'是新的' -b
'。
首先,一些背景:跟踪意味着本地分支的上游设置为远程分支:
# 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 branch更改--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 announce)
为本地分支注册上游分支将:
通知Git 显示在两个分支之间的关系
git status
和git branch -v
。在检出新分支时,
git pull
不带参数的指示从上游拉出。
TA贡献1851条经验 获得超5个赞
您无法使用此命令创建新分支
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
TA贡献1825条经验 获得超4个赞
完全没有区别!
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”)也强制使两个分支名称相等
- 3 回答
- 0 关注
- 10725 浏览
添加回答
举报