53

有很多有用的 git 引用(它的确切名称是什么?),例如HEAD, ORIG_HEAD, FETCH_HEAD, MERGE_HEAD, @{upstream} 等。

这有什么参考吗?带有解释的完整列表?

4

4 回答 4

43

git help revisions调出http://git-scm.com/docs/gitrevisions,它描述了所有引用提交的最常见方法:

  • HEAD命名您基于工作树中的更改的提交。
  • FETCH_HEAD记录您使用最后一次 git fetch 调用从远程存储库中获取的分支。
  • ORIG_HEADHEAD以剧烈方式移动您的命令创建,以记录HEAD操作之前的位置,以便您可以轻松地将分支的尖端更改回运行它们之前的状态。
  • MERGE_HEAD记录运行 git merge 时要合并到分支中的提交。
  • CHERRY_PICK_HEAD记录您在运行 git cherry-pick 时挑选的提交。

从 git 源代码中,您还可以找到有关BISECT_HEADREVERT_HEADREJECT_NON_FF_HEAD其他一些您几乎肯定永远不需要的信息。

该参考资料还解释了后缀 ( ^N, ~N, @{...})、范围 ( ..vs ...) 等。

于 2013-07-11T14:53:33.817 回答
23

HEAD:您正在查看的当前参考。在大多数情况下,它可能是refs/heads/master

FETCH_HEAD: 上次更新的分支/远程头的 SHAgit fetch

ORIG_HEAD:进行合并时,这是您要合并到的分支的 SHA。

MERGE_HEAD:进行合并时,这是您要合并的分支的 SHA。

CHERRY_PICK_HEAD:在进行挑选时,这是您挑选的提交的 SHA。

可以通过克隆 git 源找到这些 ref 的完整列表:

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

并 grepping 文件中的_HEAD"字符串.c。它们分散在各处,但仍然很容易找到。

附言

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

于 2013-07-11T14:35:47.957 回答
6

这是Git 修订版的官方 Linux Kernel Git 文档所说的:

HEAD命名您基于工作树中的更改的提交。

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

ORIG_HEADHEAD以剧烈方式移动您的命令创建,以记录HEAD其操作之前的位置,以便您可以轻松地将分支的尖端更改回运行它们之前的状态。

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

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

此外,对于@{upstream}

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

ref的后缀@{upstream}(简称<refname>@{u})指的是 ref 设置为在其上构建的分支。缺少的 ref 默认为当前分支。

于 2013-07-20T20:09:15.450 回答
1

这些引用称为指针。它们只是程序员术语中的常规指针,指向存在于 Git 中的树状实体。请注意,tree-ish 是由至少一个提交组成的任何内容,即分支、标记、存储或类似HEAD. 关于完整列表,我认为唯一存在的是手册:

http://git-scm.com/documentation

虽然没有可用的特殊指针HEAD的完整列表,但手册确实涵盖了其中可用指针的完整列表,尽管它们很难找到。

于 2013-07-11T14:38:29.200 回答