2

这些是什么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
4

3 回答 3

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.
于 2013-08-07T11:55:09.073 回答
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}仅表示 的第n 个先前位置HEAD

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

更一般地说,<reference>@{n}语法是“参考/分支的第 n 个先前位置”的简写,正如我在回答 Git 中的“at”@符号/符号/字符是什么意思?. 因此,您可以将此语法与任何参考/分支一起使用,例如:

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

正如用于指定 Git 修订的官方 Linux Kernel Git 文档中所解释的:

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

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

于 2013-08-07T14:17:03.640 回答
1

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

于 2013-08-07T11:56:30.197 回答