您可以看到Git文档中这样说
分支必须在HEAD中完全合并。
但Git HEAD到底是什么?
您可以看到Git文档中这样说
分支必须在HEAD中完全合并。
但Git HEAD到底是什么?
当前回答
分支实际上是一个持有提交ID(例如17a5)的指针。 HEAD是指向用户当前工作的分支的指针。
HEAD有一个如下所示的引用流:
ref:
您可以通过访问您正在工作的存储库中的.git/HEAD .git/refs来检查这些文件。
其他回答
Head指向当前签出分支的顶端。
在您的存储库中,有一个.git文件夹。在这个位置打开文件:.git\refs\heads。该文件(在大多数情况下是master)中的(sha-1哈希)代码将是最近的提交,即在命令git日志的输出中看到的代码。关于.git文件夹的更多信息:http://gitready.com/advanced/2009/03/23/whats-inside-your-git-directory.html
我想详细介绍一下格雷格·休吉尔公认答案中的一些内容。 根据Git口袋指南
分支机构:
分支本身定义为提交中所有可到达的点 来自命名提交的图(分支的“尖端”)。
HEAD:一种特殊类型的Ref
特殊参考HEAD决定你在哪个分支上…
Refs
Git定义了两种引用或命名指针,并调用它们 “参考文献”: 一个简单的引用,直接指向一个对象ID(通常是一个提交或标记) 一个符号ref(或symref),指向另一个ref(简单的或符号的)
正如Greg提到的,HEAD可以处于“分离状态”。所以HEAD可以是一个简单的ref(对于分离的HEAD),也可以是一个symref。
如果HEAD是一个现有分支的符号引用,那么你是“开启”的。 分支。另一方面,如果HEAD是直接的简单引用 通过SHA-1 ID命名一个提交,那么你不在任何分支上,但是 而是在“分离HEAD”模式下,当你查看一些内容时就会发生这种情况 早交审查。
我认为'HEAD'是当前的检出提交。换句话说,'HEAD'指向当前签出的提交。
如果你刚刚克隆了,没有签出,我不知道它指向什么,可能是一些无效的位置。
这两个可能会让你困惑:
head
指向分支最近提交的命名引用。除非使用包引用,否则头文件通常存储在$ GIT_DIR/refs/heads/中。
HEAD
当前分支,或者您的工作树通常是从HEAD所指向的树生成的。HEAD必须指向一个头,除非你正在使用一个独立的头。
我还在弄清楚git的内部结构,到目前为止,我已经弄清楚了这个:
假设当前的分支是master。
HEAD是你的.git/目录下的一个文件,通常看起来像这样:
% cat .git/HEAD
ref: refs/heads/master
Refs /heads/master本身是一个文件,通常包含master最新提交的哈希值:
% cat .git/refs/heads/master
f342e66eb1158247a98d74152a1b91543ece31b4
如果你做git日志,你会看到这是master的最新提交:
% git log --oneline
f342e66 (HEAD -> master,...) latest commit
fa99692 parent of latest commit
所以我的想法是HEAD文件是一种跟踪最新提交的方便方法,而不是记住长散列值。