ORIG_HEAD、FETCH_HEAD、MERGE_HEAD等含义解析

55

有很多有用的git参考资料(这个确切名称是什么?),例如HEADORIG_HEADFETCH_HEADMERGE_HEAD,@{upstream}等。

这方面有没有参考资料?一个包含解释的完整列表?


4
另外:https://dev59.com/h3NA5IYBdhLWcg3wbNQ4 - VonC
你在网上寻找答案时遇到了困难吗?这些答案可以在 git-scm.comofficial Linux Kernel Git documentation 中轻松找到。 - user456814
4个回答

44

git help revisions 调出http://git-scm.com/docs/gitrevisions,该页面描述了引用提交的最常见方式:

  • HEAD 指向工作树中您基于其进行更改的提交。
  • FETCH_HEAD 记录使用上次git fetch获取的远程存储库中的分支。
  • ORIG_HEAD 是由在显著方式下移动您的HEAD的命令创建的,以记录这些操作之前HEAD的位置,以便您可以轻松地将分支的末端更改回运行它们之前的状态。
  • MERGE_HEAD 记录您在运行git merge时正在合并到您的分支中的提交。
  • CHERRY_PICK_HEAD 在运行git cherry-pick时记录您正在挑选的提交。

除此之外,从git源码中,您还可以了解到BISECT_HEADREVERT_HEADREJECT_NON_FF_HEAD等其他几乎不需要使用的内容。

该参考还解释了后缀(^N~N@{...})、范围(.....)等内容。


2
尽管源代码中定义了 BISECT_HEAD 等变量,但你不应该假设它们一直存在。我期望在长期运行中支持 git help revisions 中列出的所有内容。 - Mikko Rantalainen

24

HEAD: 当前所在的引用。在大多数情况下,它可能是 refs/heads/master

FETCH_HEAD: 上一次 git fetch 更新的分支或远程头部的 SHA。

ORIG_HEAD: 在进行合并操作时,这是您正在合并到的分支的 SHA。

MERGE_HEAD: 在进行合并操作时,这是您从中合并的分支的 SHA。

CHERRY_PICK_HEAD: 在进行 Cherry-pick 操作时,这是您正在 Cherry-pick 的提交的 SHA。

可以通过克隆 Git 源代码并在 .c 文件中使用 grep 命令来查找“_HEAD”字符串,以获取这些引用的完整列表:

git clone https://github.com/git/git.git

它们分散在各个位置,但仍然很容易找到。

P.S.

git help revisions 不显示所有可能的命名引用列表。


7
这是Git修订版本的官方Linux内核Git文档中的原话:

HEAD表示当前工作目录中更改所基于的提交。

FETCH_HEAD记录了您最后一次使用git fetch从远程存储库获取的分支。

ORIG_HEAD由将您的HEAD在很大程度上移动的命令创建,以记录操作前HEAD的位置,以便您可以轻松地将分支的末端更改回运行它们之前的状态。

MERGE_HEAD记录了您在运行git merge时要合并到您的分支中的提交。

CHERRY_PICK_HEAD记录了您在运行git cherry-pick时要挑选的提交。

此外,对于@{upstream}

<refname>@{upstream},例如master@{upstream}@{u}

将后缀@{upstream}添加到引用(短格式为<refname>@{u})是指该引用所设置的分支要建立在其之上。如果引用不存在,则默认为当前分支。


2
这些引用被称为指针。在程序员的术语中,它们只是指向Git中存在的树状实体的常规指针。请注意,树状实体是由至少一个提交组成的任何内容,例如分支、标签、存储或类似于HEAD的东西。关于完整列表,我认为唯一存在的是手册:http://git-scm.com/documentation。虽然没有可用特殊指针(如HEAD)的完整列表,但手册确实涵盖了可用指针的完整列表,尽管它们有点难找。

请尝试使用 git help revisions 查询文档。 - Mikko Rantalainen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接