协慌网

登录 贡献 社区

Git 中的 HEAD 是什么?

你看到 Git 文档说的话

分支必须在 HEAD 中完全合并。

但 Git HEAD到底是什么?

答案

您可以将 HEAD 视为 “当前分支”。当您使用git checkout切换分支时,HEAD 修订版将更改为指向新分支的提示。

您可以通过以下方式查看 HEAD 指出的内容:

cat .git/HEAD

在我的例子中,输出是:

$ cat .git/HEAD
ref: refs/heads/master

HEAD 可以引用与分支名称无关的特定修订。这种情况称为分离的 HEAD

引用其他人

头只是对提交对象的引用。每个头都有一个名称(分支名称或标签名称等)。默认情况下,每个存储库中都有一个名为 master 的头。存储库可以包含任意数量的头。在任何给定的时间,一个头被选为 “当前头部”。这个头部别名为 HEAD,总是以大写字母 “。

注意这个区别:“head”(小写)指的是存储库中任何一个指定的头; “HEAD”(大写)仅指当前活动的头部。这种区别在 Git 文档中经常使用。

可以在这里找到另一个很好的来源,它可以快速覆盖 git 的内部工作方式(以便更好地理解 head / HEAD)。引用(ref :) 或头或分支可以被视为在提交历史记录中粘贴到提交的便利贴。通常它们指向一系列提交的提示,但它们可以通过git checkoutgit reset等移动。

我推荐 github 开发人员 Scott Chacon 的这个定义 [ 视频参考 ]:

Head 是您目前的分支。这是一个象征性的参考。它是对分支的引用。你总是有 HEAD,但是 HEAD 将指向其中一个指针,指向你所在的一个分支。它是您下次提交的父级。它应该是最后签出到您的工作目录中的内容...... 这是您的工作目录的最后已知状态。

整个视频将对整个 git 系统进行公平的介绍,所以如果有时间的话,我也建议你全部观看。