head

0 阅读2分钟

简介

在学习各种命令之前,最好先理解什么是head

你一旦真正理解 HEAD,Git 就通透了。

一句话先说清

HEAD 是“你当前所在位置”的指针。

它表示:

“我现在基于哪个 commit 在工作?”

1.head的底层原理

先理解 Git 的本质:

Git 的三层结构 + 一个概念:(必须先理解)

Git 本质是三个区域:

  • 工作区(Working Directory)
  • 暂存区(Index)
  • 本地仓库(.git 里的 commit 对象 + 指针(分支))

再加一个概念:

  • 远程引用(其实包括在本地仓库这个区域中,理解成一个特殊的分支,是远程分支在本地的镜像分支)

这里我们重点看本地仓库这个区域,假设你现在在master分支:

A --- B --- C (master),于是

- A/B/C 是 commit 对象

- master 是指向 C 的指针

那 HEAD 是什么?

HEAD 是:一个指向“当前分支”的指针

通常它不是直接指向 commit,它指向master,而 master 再指向C

结构其实是:

HEAD → master → C

HEAD 在文件里长什么样?

在你的项目里有个文件:

.git/HEAD

正常情况下内容是:

ref: refs/heads/master

意思是:

HEAD 指向 master 分支

2.为什么需要 HEAD?

因为 Git 需要知道:

  • 你现在在哪个分支
  • 新提交应该接在哪里

当你 commit 时:

git commit

Git 会:

  1. 创建一个新 commit(比如 D)
  2. 把当前分支(master)移动到 D
  3. HEAD 仍然指向 master

结果:

HEAD → master → D

这非常关键,HEAD ≠ master,很多人混淆。

当你 git checkout dev 切换到 dev 分支,这时:head → dev,master 并不曾变,但是 head 指向了其他的分支,从而告诉我们文章开头所说的,“我现在基于哪个 commit 在工作?”

HEAD 是“你当前所在位置”的指针。

这非常好理解

把 Git中的本地仓库 想成一张地图,就特别好理解head的作用:

  • commit = 城市
  • 分支 = 路线
  • HEAD = 你现在站在哪个路标下

image.png