为了账号安全,请及时绑定邮箱和手机立即绑定

git checkout --track origin / branch和git checkout

git checkout --track origin / branch和git checkout

Git
阿晨1998 2019-08-24 15:26:48
git checkout --track origin / branch和git checkout -b branch origin / branch之间的区别有人知道切换和跟踪远程分支这两个命令之间的区别吗?git checkout -b branch origin/branchgit checkout --track origin/branch我认为两者都跟踪远程分支,所以我可以将我的更改推送到原点上的分支,对吧?有什么实际差异吗?谢谢!
查看完整描述

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>.remotebranch.<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 statusgit branch -v

  • 在检出新分支时,git pull 不带参数的指示从上游拉出


查看完整回答
反对 回复 2019-08-24
?
江户川乱折腾

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


查看完整回答
反对 回复 2019-08-24
?
凤凰求蛊

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 statusgit pushgit merge并因此git pull(如果配置这样的(这是默认值或几乎默认))。

例如git status,如果配置了上游,请告诉您上游的前后距离。

git push配置为从git 2.0开始默认将当前分支推送到上游2

1 ...如果“origin”是唯一具有“branch” 2遥控器,则默认(名为“simple”)强制使两个分支名称相等


查看完整回答
反对 回复 2019-08-24
  • 3 回答
  • 0 关注
  • 10532 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信