关于Git分支中HEAD和Master的理解

在读廖雪峰官方网站里Git教程分支管理中“创建与合并分支”开篇时,对于HEAD和master的理解有些模糊,因此想在此做以通俗透彻的解释说明。

这部分前半句,也就是:

在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支

这部分,还是很容易理解的。确实,在跟随廖雪峰老师学习Git操作时,截止到目前,只有一条时间线(也就是一个分支),这个分支在Git里叫主分支(即master分支)。

如果从团队协作的角度来看,这条master分支,也就是我们要克隆(clone)或者推送(push)之前要同步拉取(pull)到本地的主分支master。

而后半部分,即:

HEAD严格来说不是指向提交,而是指向mastermaster才是指向提交的,所以,HEAD指向的就是当前分支。

一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:”,

却让人在理解上有些困难模糊

关于HEAD和master的关系,我们首先需要厘清几个概念

  • 分支:
  1. 我们可以把分支看作是一条线段,上面刻画有每次事件发生时的时间标记。
  2. git可以有很多分支。不仅包括master分支,而且还可以包括任何你想要的分支
  3. 以树比喻,可以把master看作本地的必须存在的主干或者主分支,其他分支可以看作是master的分支或者分枝,其他分支最终都会合并至master分支
  • 当前分支:
  1. 任何时候,HEAD所指向的分支就是当前分支
  2. 无任何新建分支情况下,也就是只有master分支,HEAD所指向的分支就是当前分支master
  3. 在新建分支New_Branch并指向后,HEAD所指向的分支就是当前分支New_Branch。
  • 分支变化:
  1. 执行git commit命令HEAD指向当前分支(不一定是master分支)最近一次提交commit后的时间标记点
  2. 执行git reset命令HEAD指向reset命令后的事件的时间标记点
  3. git commit命令,可以更改(准确地说,是通过添加新的时间标记点来增长)当前分支线,同时使HEAD指向当前分支线上最新的时间标记点
  4. git reset命令可以使HEAD重新指向当前分支线上的某个时间标记点,同时更改(准确地说,是缩短或者回退)当前分支线,同时更新工作区内容为相应的版本

所以,在无新建并指向的的分支情况下

可以把master当作一条有很多间隔点(HEAD~)的当前分支(时间线),因为没有其他兄弟分支。

  • master是一条可变的记录提交时间的分支线。
  • HEAD~是当前分支(时间线)上的时间标记点,包括HEAD、HEAD^、HEAD^^、HEAD~

 

你可能感兴趣的:(工具,Git,git,github)