这些是什么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
这些是什么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
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.
在原始海报的示例中:
$ 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/”)。
这种情况下的@{n}
部分是“历史可以追溯到多远”。 HEAD@{0}
是最近的值,HEAD
并且HEAD@{1}
是HEAD
在最近的值存储在其中之前的值。有关更多信息,请参阅git-rev-parse手册中的“指定修订” 。