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

lak*_*are 4 git git-checkout

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

$ git checkout master
$ git checkout -b a
Run Code Online (Sandbox Code Playgroud)

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

为什么我们需要第一线呢?它有所不同,还是我可以把它留下来?

jub*_*0bs 8

TL; DR

为什么我们需要第一线呢?[...]

这是一种稍微迂回的方式来确保新分支a指向同一个提交master.

更详细的答案

是什么git checkout -b newbranch

要修改想法,您可以将HEAD指针视为地铁地图上的"你在这里"标记,即您的提交图.现在,以下命令,

git checkout -b newbranch
Run Code Online (Sandbox Code Playgroud)

创建并检出一个新的分支newbranch,该分支指向(直接或间接)指向的同一提交HEAD.例如,如果您的仓库看起来如下,

在此输入图像描述

通过跑步git checkout -b newbranch,你最终会得到

在此输入图像描述

Michael Hartl领导你的地方

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

在此输入图像描述

那么,为什么先退房master呢?

通过要求你运行

git checkout master
Run Code Online (Sandbox Code Playgroud)

迈克尔哈特尔只是确保你的HEAD点(间接)到正确的提交,即提示master:

在此输入图像描述

然后,跑步

git checkout -b newbranch
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

不过,首先退房master可能看起来有点笨拙.您实际上可以将这两个命令压缩为一个:

git checkout -b newbranch master
Run Code Online (Sandbox Code Playgroud)

无论你在repo中的哪个HEAD位置(即指向哪里),这个命令都会创建并签出一个新的分支newbranch,该分支指向了尖端master.

但是,因为Rails教程旨在满足Git的新手,因为

git checkout -b newbranch master
Run Code Online (Sandbox Code Playgroud)

有点先进,可能不那么直观

git checkout master
git checkout -b newbranch
Run Code Online (Sandbox Code Playgroud)

你不能真的责怪迈克尔哈特尔推荐后者.