HEAD @ {n}在git reflog的输出中意味着什么?

时间:2013-08-07 11:44:32

标签: git

这些HEAD@{0}HEAD@{1}是什么意思? HEAD不应该是指向单个提交的标记吗?为什么它会同时显示?

git reflog
97df263 HEAD@{0}: commit: I just made my first change to this file. Yay!
4333289 HEAD@{1}: clone: from https://github.com/tswicegood/mysite

3 个答案:

答案 0 :(得分:5)

HEAD@{1}是旧HEAD,HEAD@{2}之前是HEAD,依此类推。

示例:

$ git reflog
abcdefg HEAD@{0}: Initial commit.

$ git commit -m "Add new function."
[master ab123cd] Add new function.
 1 file changed, 15 insertions(+), 2 deletions(-)

$ git reflog
ab123cd HEAD@{0}: Add new function.
abcdefg HEAD@{1}: Initial commit.

答案 1 :(得分:2)

在原始海报的例子中:

$ git reflog
97df263 HEAD@{0}: commit: I just made my first change to this file. Yay!
4333289 HEAD@{1}: clone: from https://github.com/tswicegood/mysite

HEAD@{n}只需表示HEAD的第n个先前位置

  • HEAD@{0} 表示HEAD的第0个先前位置
    • 换句话说,HEAD的当前位置,HEAD@{0}实际上与HEAD相同。
  • HEAD@{1} 表示HEAD的第一位置
  • HEAD@{2} 表示HEAD的第二位置,依此类推。

更一般地说,<reference>@{n}语法是简写为“引用/分支的第n个先前位置”,正如我在my answer to What does the “at” @ sign/symbol/character mean in Git?中所述。因此,您可以将此语法与任何引用/分支一起使用,例如:

  • master@{1}master分支的第一个位置。
  • origin/master@{1}是远程跟踪分支origin/master的第一个先前位置。

正如official Linux Kernel Git documentation for specifying Git revisions

中所述
  

<refname>@{<n>},例如master@{1}

     

后跟后缀“@”的ref,括号对中包含的序数规范(例如“{1}”,“{15}”)指定该ref的第n个先前值。例如,“master @ {1}”是master的直接先前值,而“master @ {5}”是master的第5个先前值。此后缀只能在引用名称后立即使用,并且引用必须具有现有日志(“$ GIT_DIR / logs /").

答案 2 :(得分:1)

在这种情况下,@{n}部分是“历史可以追溯到多久”。 HEAD@{0}HEAD的最新值,HEAD@{1}是值HEAD之前的最新值存储在其中。有关详细信息,请参阅git-rev-parse手册中的“指定修订”。