您可以看到Git文档中这样说
分支必须在HEAD中完全合并。
但Git HEAD到底是什么?
您可以看到Git文档中这样说
分支必须在HEAD中完全合并。
但Git HEAD到底是什么?
当前回答
Head指向当前签出分支的顶端。
在您的存储库中,有一个.git文件夹。在这个位置打开文件:.git\refs\heads。该文件(在大多数情况下是master)中的(sha-1哈希)代码将是最近的提交,即在命令git日志的输出中看到的代码。关于.git文件夹的更多信息:http://gitready.com/advanced/2009/03/23/whats-inside-your-git-directory.html
其他回答
我推荐github开发者Scott Chacon的定义:
Head是你当前的分支。这是一个象征性的参照。它是对分支的引用。你总是有HEAD,但HEAD会指向其他指针之一,指向你所在的某个分支。它是您下次提交的父节点。它应该是最后签入工作目录的内容。这是您的工作目录的最后一个已知状态。
整个视频将公平地介绍整个git系统,所以如果有时间,我也建议你看一遍。
引用别人的话:
A head is simply a reference to a commit object. Each head has a name (branch name or tag name, etc). By default, there is a head in every repository called master. A repository can contain any number of heads. At any given time, one head is selected as the “current head.” This head is aliased to HEAD, always in capitals". Note this difference: a “head” (lowercase) refers to any one of the named heads in the repository; “HEAD” (uppercase) refers exclusively to the currently active head. This distinction is used frequently in Git documentation.
可以在这里找到另一个很好的源代码,它可以快速覆盖git的内部工作原理(因此可以更好地理解heads/HEAD)。引用(ref:)或头或分支可以被看作是粘贴在提交历史记录中的提交上的便利贴。通常它们指向一系列提交的提示,但它们可以随着git checkout或git reset等移动。
要把正确答案中的要点讲清楚,一个很好的方法就是跑步 git reflog HEAD,你会得到HEAD所指向的所有地方的历史。
HEAD指的是工作副本所指向的当前提交,即当前签出的提交。从官方Linux内核文档中指定Git修订:
HEAD命名您在工作树中基于更改的提交。
但是请注意,在即将到来的Git 1.8.4版本中,@也可以用作HEAD的简写,Git贡献者Junio C Hamano在他的Git Blame博客中指出:
你可以不说“HEAD”,而说“@”。“git log @”。
Stack Overflow用户VonC在回答另一个问题时还发现了一些有趣的信息,关于为什么选择@作为简写。
同样值得注意的是,在某些环境中,没有必要将HEAD大写,特别是在使用不区分大小写文件系统的操作系统中,特别是Windows和OS X。
我想详细介绍一下格雷格·休吉尔公认答案中的一些内容。 根据Git口袋指南
分支机构:
分支本身定义为提交中所有可到达的点 来自命名提交的图(分支的“尖端”)。
HEAD:一种特殊类型的Ref
特殊参考HEAD决定你在哪个分支上…
Refs
Git定义了两种引用或命名指针,并调用它们 “参考文献”: 一个简单的引用,直接指向一个对象ID(通常是一个提交或标记) 一个符号ref(或symref),指向另一个ref(简单的或符号的)
正如Greg提到的,HEAD可以处于“分离状态”。所以HEAD可以是一个简单的ref(对于分离的HEAD),也可以是一个symref。
如果HEAD是一个现有分支的符号引用,那么你是“开启”的。 分支。另一方面,如果HEAD是直接的简单引用 通过SHA-1 ID命名一个提交,那么你不在任何分支上,但是 而是在“分离HEAD”模式下,当你查看一些内容时就会发生这种情况 早交审查。