git checkout --track origin / branch和git checkout

git checkout --track origin / branch和git checkout -b branch origin / branch之间的区别

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


git checkout -b branch origin/branch

git checkout --track origin/branch

我认为两者都跟踪远程分支,所以我可以将我的更改推送到原点上的分支,对吧?


有什么实际差异吗?


谢谢!


阿晨1998
浏览 10548回答 3
3回答

扬帆大鱼

这两个命令具有相同的效果(感谢Robert Siemer的答案,指出它)。使用不同名称的本地分支时会出现实际差异:git checkout -b mybranch origin/abranch将创建mybranch和跟踪origin/abranchgit checkout --track origin/abranch将只创建'&nbsp;abranch',而不是具有不同名称的分支。(也就是说,正如塞巴斯蒂安·格拉夫所评论的那样,如果当地的分支机构已经不存在了。如果确实如此,你需要git checkout -B abranch origin/abranch)注意:使用Git 2.23(Q9 2019),将使用新命令git switch:git&nbsp;switch&nbsp;-c&nbsp;<branch>&nbsp;--track&nbsp;<remote>/<branch>如果分支存在于多个遥控器中,并且其中一个由checkout.defaultRemote配置变量命名,我们将使用该分支用于消除歧义,即使它<branch>在所有遥控器中都不是唯一的。将其设置为例如checkout.defaultRemote=origin,如果<branch>不明确但始终存在于“origin”遥控器上,则始终从那里检出远程分支。在这里,'&nbsp;-c'是新的'&nbsp;-b'。首先,一些背景:跟踪意味着本地分支的上游设置为远程分支:#&nbsp;git&nbsp;config&nbsp;branch.<branch-name>.remote&nbsp;origin#&nbsp;git&nbsp;config&nbsp;branch.<branch-name>.merge&nbsp;refs/heads/branchgit checkout -b branch origin/branch&nbsp;将:创建/重置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):&nbsp;#&nbsp;or,&nbsp;since&nbsp;1.7.0 &nbsp;git&nbsp;branch&nbsp;--set-upstream&nbsp;upstream/branch&nbsp;branch &nbsp;#&nbsp;or,&nbsp;since&nbsp;1.8.0&nbsp;(October&nbsp;2012) &nbsp;git&nbsp;branch&nbsp;--set-upstream-to&nbsp;upstream/branch&nbsp;branch &nbsp;#&nbsp;the&nbsp;short&nbsp;version&nbsp;remains&nbsp;the&nbsp;same: &nbsp;git&nbsp;branch&nbsp;-u&nbsp;upstream/branch&nbsp;branch它还会为'&nbsp;branch'&nbsp;设置上游。(注意:git1.8.0将弃用git branch --set-upstream并替换为git branch -u|--set-upstream-to:请参阅git1.8.0-rc1 announce)为本地分支注册上游分支将:通知Git&nbsp;显示在两个分支之间的关系git status和git branch -v。在检出新分支时,git pull&nbsp;不带参数的指示从上游拉出。

江户川乱折腾

您无法使用此命令创建新分支git checkout --track origin/branch如果您有未上演的更改。这是一个例子:$ git statusOn branch masterYour branch is up to date with 'origin/master'.Changes not staged for commit:&nbsp; (use "git add <file>..." to update what will be committed)&nbsp; (use "git checkout -- <file>..." to discard changes in working directory)&nbsp; &nbsp; &nbsp; &nbsp; modified:&nbsp; &nbsp;src/App.jsno changes added to commit (use "git add" and/or "git commit -a")// TRY TO CREATE:$ git checkout --track origin/new-branchfatal: 'origin/new-branch' is not a commit and a branch 'new-branch' cannot be created from it但是,您可以使用git checkout -b命令轻松创建具有未分阶段更改的新分支:$ git checkout -b new-branchSwitched to a new branch 'new-branch'M&nbsp; &nbsp; &nbsp; &nbsp;src/App.js

凤凰求蛊

完全没有区别!1)&nbsp;git checkout -b branch origin/branch如果--track没有--no-track,--track则假定为默认值。可以使用设置更改默认值branch.autosetupmerge。实际上,1)表现得像git checkout -b branch --track origin/branch。2)&nbsp;git checkout --track origin/branch“作为一种便利”,--track没有-b暗示-b和争论-b被认为是“分支”。猜测由配置变量驱动remote.origin.fetch。实际上,2)表现得像git checkout -b branch --track origin/branch。如你所见:没有区别。但它变得更好:3)&nbsp;git checkout branchgit 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&nbsp;...如果“origin”是唯一具有“branch”&nbsp;2的遥控器,则默认(名为“simple”)也强制使两个分支名称相等
打开App,查看更多内容
随时随地看视频慕课网APP