简介
在学习各种命令之前,最好先理解什么是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 会:
- 创建一个新 commit(比如 D)
- 把当前分支(master)移动到 D
- HEAD 仍然指向 master
结果:
HEAD → master → D
这非常关键,HEAD ≠ master,很多人混淆。
当你 git checkout dev 切换到 dev 分支,这时:head → dev,master 并不曾变,但是 head 指向了其他的分支,从而告诉我们文章开头所说的,“我现在基于哪个 commit 在工作?”
HEAD 是“你当前所在位置”的指针。
这非常好理解
把 Git中的本地仓库 想成一张地图,就特别好理解head的作用:
- commit = 城市
- 分支 = 路线
- HEAD = 你现在站在哪个路标下