git heads 详解

Last Modified: 2023/08/11

概述

git 中有不少概念,这些概念是 git 比较复杂的地方,git 新手甚至不乏一些老手也会对某些概念模糊不清,本文将会为大家讲述 git heads 这个概念,希望对大家有用。提醒大家注意,这个地方的 head 是小写,大写的 HEAD 和 小写的 head 是不同的概念,请勿混淆。如果你想知道 HEAD 的概念和用法请移步 git HEAD 详解

什么是 git heads

在 Git 中,head 是一个指向分支最新 commit 的 ref。你可以在项目根目录下 .git/refs/heads/ 子目录中找到所有的 head 文件。在该目录中,你会发现每个分支都对应一个以分支名称命名的 head 文件,每个 head 文件的内容都是该分支的最后一次提交的 commit ID。

注:上面提交到了 ref,这里大家不用太纠结,可以将 ref 看成 commit 的一个别名,因为 commit id 是一串很长的无意义的数字,ref 就是给 commit 一个有意义的名字,方便以后使用和记忆。这也顺便解释了为什么 head 文件会在 .git/refs/heads 目录中,因为 head 就是特殊的 ref。

实操一把

以我的某个项目为例,总共有两个分支,一个 dev 分支,一个 master 分支,让我们使用 ls 命令(windows 下使用 dir 命令)看看 heads 文件:

ls -l .git/refs/heads/ 

输出内容如下:

-rw-rw-r-- 1 lucy lucy 41 4月  19 18:37 dev
-rw-rw-r-- 1 lucy lucy 41 7月  26  2022 master

可见 heads 中的文件跟我们的分支的名称一一对应,再查看 dev 文件的内容:

cat .git/refs/heads/dev

注:不一定非要使用命令查看文件的内容,windows 用户可以使用任何自己喜欢的编辑器查看文件的内容。

输出结果如下:

4736748ab27b3af086d66123a655cf12cfd02956

前面说到 head 文件中的内容就是分支最后一次提交的 commit id,那我们看下 dev 分支最后一次提交的 commit id 是不是和上面的一致,可以使用下面的命令查看 dev 分支最后一次提交的 commit id。

# 先切换到 dev 分支
git checkout dev
# 查看最后一次提交的 commit id
git log --format="%H" -n 1

输出结果如下:

4736748ab27b3af086d66123a655cf12cfd02956

可以看出 dev 分支最后一次提交的 commit id 和 .git/refs/heads/dev 文件中记录的 commit id 完全一致。当我们在 dev 分支上有新的提交时,head 文件的内容会自动更新成上次提交的 commit id。

注:有些地方也将 commit id 说成是 commit hash,都是一回事,无需纠结。

有问题吗?点此反馈!

温馨提示:反馈需要登录