这些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
答案 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手册中的“指定修订”。