为什么要在创建新分支之前检查 master?

Why check out master before creating a new branch?

我正在阅读 Rails Tutorial book,作者一遍又一遍地要求 reader 到 运行 以下两个命令:

$ git checkout master
$ git checkout -b a

我明白这些命令的作用:它们检出 master 分支,然后创建并检出一个名为 a.

的新分支

为什么我们需要第一行?它有什么不同吗,还是我可以忽略它?

当你分支时,你从一个特定的提交分支。检查 master 确保您的新分支从 master 分支的头部(最近提交)开始。

创建分支时将以创建分支时的开始提交。从 Master HEAD 创建它是一种常见的模式,但这取决于您要遵循的分支工作流程。拥有 git 工作流程很重要,项目中的所有人都遵循相同的模式,以便所有成员的可维护性和协作。检查 this link 以查看一些最常见的 git 工作流程。

TL;DR

Why do we need the first line at all? [...]

这是确保新分支 a 指向与 master 相同的提交的一种稍微迂回的方法。

更详细的回答

git checkout -b newbranch 的作用

为了修正想法,您可以将 HEAD 指针视为作为您的提交图的地铁地图上的 You-are-here 标记。现在,下面的命令,

git checkout -b newbranch

创建并签出一个名为 newbranch 的新分支,该分支指向 HEAD(直接或间接)指向 的同一提交。例如,如果您的存储库如下所示,

通过 运行宁 git checkout -b newbranch,你最终会得到

Michael Hartl 带你去的地方

但是,Michael Hartl(Rails Tutorial 的作者)希望您创建并检出一个指向特定提交的新分支 :您的提示master 分支(即 master 分支指向的提交):

那么,为什么要先查看 master

请你运行

git checkout master

Michael Hartl 只是确保您的 HEAD 指向(间接)正确的提交,即 master:

的提示

然后,运行宁

git checkout -b newbranch

肯定会在需要的地方创建新分支:

更直接的方法:两只鸟,一块石头...

不过,必须首先检查 master 似乎有点笨拙。您实际上可以将这两个命令压缩为一个:

git checkout -b newbranch master

无论您在存储库中的哪个位置(即 HEAD 指向的位置),此命令都将创建并检出一个名为 newbranch 的新分支,该分支指向 [=17= 的顶端].

但是,因为 Rails 教程是针对 cater for people who are new to Git 的,并且因为

git checkout -b newbranch master

更高级,但可能更不直观
git checkout master
git checkout -b newbranch

你真的不能怪 Michael Hartl 推荐了后者。