我有一个常规git reflog --date=iso
显示大量条目的存储库,例如,请参阅此片段https://gist.github.com/FreddieChopin/0206c9ef530a056c624b065eed048c9d
正如您可能注意到的那样,2月19日,22日,23日,24日,25日和26日有点击日志。
但是如果我想将输出限制在某些日期,那么这并不像预期的那样工作。例如git reflog --date=iso --since="2017-02-20"
仅提供此https://gist.github.com/FreddieChopin/fb7619dee8fde055a1cce6f6ff2f6eb6 - 它会停在" 52896f49 HEAD @ {2017-02-24 20:53:29 +0100}",即使存在reflog从那以后的2月20日。甚至有24小时的reflogs,小时数较少,所以我不知道为什么它会在那里停止。
同样的问题是我检查过的另一个存储库,所以这似乎与reflog本身有关,而不是特定的存储库。其他回购的问题更奇怪,例如git reflog --since="50.weeks"
提供了我过去几天天的提交,而git reflog --since="60.weeks"
开始进一步回到过去 - 在那回购几年前也有定期提交。
另一方面,git log --since=...
完全符合预期,所以我不确定这里的问题是什么......
答案 0 :(得分:1)
请注意,Git 2.14.x / 2.15修复了reflog的一些问题
请参阅commit de23944,commit d08565b,commit 7f97de5,commit 7c2f08a,commit f35650d,commit 82fd0f4,commit 7cf686b(2017年7月7日)和{ {3}}(2017年7月9日)commit 822601e
(由Jeff King (peff
)合并于Junio C Hamano -- gitster
--,2017年8月11日)
reflog-walk:apply --since / - 直到reflog日期
在进行reflog行走时,我们使用提交日期来进行任何日期限制。在早期版本的Git中,这可能会导致无意义的结果,因为跳过的提交会截断遍历。
所以像这样的序列:
git commit ...
git checkout week-old-branch
git checkout -
git log -g --since=1.day.ago
即使"git commit
""--until
&#34进一步回来仍然很有趣。从先前的提交开始,它使用reflog的无父遍历,你得到整个reflog减去日期与指定选项不匹配的任何提交。
这可以说是有用的,因为您可以扫描提交的reflog 起源于一定范围。但是,执行reflog walk的用户更希望根据reflog条目本身进行限制 您可以使用以下代码模拟
git log -g @{1.day.ago}
# show me reflog entries from the past day
git log -g --since=1.day.ago
但是没有办法让Git只能回到a 某个约会。 E.g:
if (!file_exists( 'example.db')) {
throw new Exception('No database file');
}
这个补丁教导修改机制更喜欢 reflog输入日期为执行reflog时的提交日期 行走。
从技术上讲,这是影响行为的变化 管道,但以前的行为是如此的错误,以至于它 不太可能有人依赖它。