为什么git checkout会创建一个跟踪远程分支的分支?

时间:2015-10-19 11:23:06

标签: git github version-control

我在远程仓库有两个分支 - 主和开发。

现在,在克隆存储库之后,我在名为master的唯一本地分支上。在git checkout development之后,这是我收到的消息:

  

分支开发设置为从源跟踪远程分支开发。   切换到新的分支'开发'

这究竟是怎么回事?我没有指定-b标志来创建新的本地分支。如果我改为git checkout adasdasd,我会得到error: pathspec 'asdasdasd' did not match any file(s) known to git.,这是有道理的。但它只是一些默认的git行为(如果checkout中指定的名称与远程分支匹配,则创建本地分支)?

简而言之,它看起来像git checkout development,第一次运行,实际执行git checkout -b development origin/development

2 个答案:

答案 0 :(得分:2)

是的,如果您签出一个作为远程存在的分支,它会假定您要创建一个跟踪远程分支的分支。

来自文档:

  

如果找不到但是在一个遥控器(称为< remote>)中确实存在跟踪分支,并且具有匹配的名称,则视为等效于

$ git checkout -b <branch> --track <remote>/<branch>

这在很多时候显然非常有用 - 这通常是人们想要做的事情。如果您希望您的分支基于您当前的分支,而不是具有相同名称的远程跟踪分支,或者如果存在名称冲突,那么它很烦人。

如果你做git checkout -b foo,这不会发生。请注意,如果您还没有名为foo的分支,那么无论如何这都是您想要的。

答案 1 :(得分:0)

这只是意味着您克隆的存储库在远程(GitHub)上具有development分支。

克隆它时,所有远程分支也被克隆。这就是git checkout development工作的原因(在development分支上切换你)。

如果您发现此意外,可以从遥控器中删除它:

git push origin --delete development

要在遥控器上推一个分支(你可能在GitHub上推动你的分支时这样做了):

git push origin development
# or 
git push --all # this will push all your branches