git checkout <分支名称>和git checkout -b <分支名称>有什么区别

时间:2019-05-03 17:37:45

标签: git git-checkout

我对git还是很陌生,所以我要进行拳头提交,为此,我通过输入git checkout my_branch创建了一个分支。但是在文档中看到它是git checkout -b my_branch

两者之间有什么区别吗?

2 个答案:

答案 0 :(得分:5)

是:

$ git checkout asdfadsf
error: pathspec 'asdfasdf' did not match any file(s) known to git

此操作失败,因为我没有有分支asdfasdf。 Git尝试将asdfasdf当作文件名,而我也不也有一个名为asdfasdf的文件。

$ git checkout -b asdfasdf
Switched to a new branch 'asdfasdf'

此操作成功并创建了一个新分支。

另一方面,我没有有一个名为maint的分支,但是:

$ git checkout maint
Branch 'maint' set up to track remote branch 'maint' from 'origin'.
Switched to a new branch 'maint'

这也创建了一个 new 分支maint。但是请注意它看起来如何不同。它仍然显示Switched to a new branch,但是 first 它显示Branch 'maint' set up to track remote branch 'maint' from 'origin'.

其背后的原因有些复杂,但可以归结为:

  • 没有 -b,如果您请求一个没有的分支,Git将尝试一些替代方法。其中一些可能有效!按照maint的工作方式进行操作时,新分支已经设置了上游
  • 使用 -b,Git会创建分支,不询问任何问题(前提是可以创建一个新分支)。新分支不会设置为上游。如果您已经有分支机构,则会收到错误消息。

如果您想要一个带有上游集的分支(例如,如果有一个origin/feature/x123并且您想要创建自己的feature/x123进行匹配),那么您 don 't 想要-b选项,因为这样不会搜索上游origin/feature/x123。如果您想要上游集,则想要-b选项。

(是否以及何时需要您的上游集是一个单独的问题。在StackOverflow中搜索现有答案。)

答案 1 :(得分:0)

当您使用-b运行时,您正在告诉git为您创建分支。不带-b的git checkout要求分支已经存在才能正常工作。

相关问题