Git 吉特';s<;参考名称>@{<;date>;}格式不';你不总是工作吗?

Git 吉特';s<;参考名称>@{<;date>;}格式不';你不总是工作吗?,git,Git,看着这些,我似乎可以做一些事情,比如: git show "master@{3 minutes ago}":foo git show "master@{1 minute ago}":foo git log "master@{20 minutes ago}" git log "master@{1 minute ago}" 其中,上面的foo只是一个简单的文本文件 因此,这些方法似乎有效,为foo或日志显示不同的内容。但是如果我 git clone https://github.com/git/g

看着这些,我似乎可以做一些事情,比如:

git show "master@{3 minutes ago}":foo
git show "master@{1 minute ago}":foo
git log "master@{20 minutes ago}"
git log "master@{1 minute ago}"
其中,上面的
foo
只是一个简单的文本文件

因此,这些方法似乎有效,为
foo
或日志显示不同的内容。但是如果我

git clone https://github.com/git/git.git
cd git
现在如果我这样做了

git log "master@{100 days ago}"

然后,我得到了相同的日志,就好像我在做
git log
——这是如何工作的?

语法访问reflogs,而不是分支历史。reflog存储您在本地对分支所做的更改。当您提交某些内容时,以及当您以某种方式重置/重写分支时,它会做一个注释。因此,reflogs可以用来撤销对分支所做的侵入性更改

另一方面,语法只能用于引用您自己在存储库副本中所做的更改,但您可以访问历史中不可见的更改,特别是重写历史的更改


如果您想按日期筛选正常日志输出,请查看选项
--since
/
after
--since
/
before

是的,因此我尝试了
git show“master@{1年前]”:ws.c
并提供了当前版本。。。我必须做
git show d932:ws.c
才能获得上一个版本如果我使用
git show“master@{1年前]:ws.c>ws.c.1.year.ago.c
重定向文件,那么它会显示
警告:“master”的日志只返回到周一,2014年5月12日02:46:08-0700。
但是如果我不重定向到文件,那么就没有警告。我认为这可能是一个错误。。。对于阅读该文件并认为1年前的文件如屏幕所示的人,如果我说
git show d932:ws.c
,我可以得到一年前的版本(通过检查git日志),然后
git show“master@{1年前]:ws.c
不能,那么我认为git不是那么完美,语法是用于访问reflogs的,不是为了访问历史。您的reflog中没有任何内容到达那么远的地方,因此您在那么远的地方没有得到任何结果(如果
@{}
找到最接近的匹配项,在您的情况下可能是reflog中最古老的条目)。请随意提出/实现一个附加语法,用于访问与Commitish相关的历史记录。关于您描述的警告:git很可能会输出警告,但您的寻呼机会立即覆盖屏幕内容,因此您无法看到它。这与其说是Git中的一个bug,不如说是将STDOUT重定向到寻呼机而不是STDERR时出现的一般问题。我不知道用流行的寻呼机来防止这种情况。解决方法示例:
git show blah@{昨日}2>&1|less