Git日志突然错过提交(在之后)



在这里找到了类似的东西:

git-log-all怎么会错过一个提交点?

但它处理悬挂提交,这不是我在这里遇到的问题。(这是在git版本2.17.1,Ubuntu 18.04上)

基本上,我一直在使用一个脚本,它自动创建一个小的git repo,带有空的提交和固定的时间戳;今晚我一定删除并重新创建了这个回购至少100次。

直到大约20分钟前,行为还是一样的——这就是整个历史的样子(编辑:添加--graph,以显示它是纯线性历史,没有分支):

$ git --no-pager log --graph --all --pretty='%ad %cd %h'
* Wed Jul 4 16:56:04 2018 +0000 Wed Jul 4 16:56:04 2018 +0000 bec8f1c
* Wed Jul 4 16:10:24 2018 +0000 Wed Jul 4 16:10:24 2018 +0000 dd51181
* Wed Jun 20 18:31:47 2018 +0000 Wed Jun 20 18:31:47 2018 +0000 8b7ca2a
* Wed Jun 20 18:11:11 2018 +0000 Wed Jun 20 18:11:11 2018 +0000 9a32592
* Wed Jun 20 17:10:17 2018 +0000 Wed Jun 20 17:10:17 2018 +0000 2454ee0
* Wed Jun 20 16:56:22 2018 +0000 Wed Jun 20 16:56:22 2018 +0000 b77dee4
* Tue Jun 19 21:40:13 2018 +0000 Tue Jun 19 21:40:13 2018 +0000 c9dc470
* Tue Jun 19 19:20:31 2018 +0000 Tue Jun 19 19:20:31 2018 +0000 baceab3
* Tue Jun 19 18:30:11 2018 +0000 Tue Jun 19 18:30:11 2018 +0000 89ab6c2
* Tue Jun 19 17:35:19 2018 +0000 Tue Jun 19 17:35:19 2018 +0000 a95553d
* Thu Jun 14 10:01:05 2018 +0000 Thu Jun 14 10:01:05 2018 +0000 c61c8fc
* Thu Jun 14 09:19:41 2018 +0000 Thu Jun 14 09:19:41 2018 +0000 2046e07
* Thu Jun 14 08:26:38 2018 +0000 Thu Jun 14 08:26:38 2018 +0000 f205435
* Thu Jun 14 08:26:29 2018 +0000 Thu Jun 14 08:26:29 2018 +0000 d4c70f1
* Wed Jun 13 19:20:16 2018 +0000 Wed Jun 13 19:20:16 2018 +0000 28a5a55

我得到了git --no-pager log --all --pretty='%ad %h' --after 2018-06-13的相同输出(我认为"在"2018-06-13意味着不会包括2018-06-13的提交,但事实并非如此:"Wed-Jun 13"提交仍然与--after 2018-06-13一起列出)。

无论如何,在晚上的大部分时间里,--after 2018-06-14Thu Jun 14 08:26:29开始,包括了Thu Jun 14的所有四个提交,以及之后的所有提交;基本上,它看起来是这样的:

$ git --no-pager log --all --pretty='%ad %h' --after 2018-06-14
Wed Jul 4 16:56:04 2018 +0000 bec8f1c
Wed Jul 4 16:10:24 2018 +0000 dd51181
Wed Jun 20 18:31:47 2018 +0000 8b7ca2a
Wed Jun 20 18:11:11 2018 +0000 9a32592
Wed Jun 20 17:10:17 2018 +0000 2454ee0
Wed Jun 20 16:56:22 2018 +0000 b77dee4
Tue Jun 19 21:40:13 2018 +0000 c9dc470
Tue Jun 19 19:20:31 2018 +0000 baceab3
Tue Jun 19 18:30:11 2018 +0000 89ab6c2
Tue Jun 19 17:35:19 2018 +0000 a95553d
Thu Jun 14 10:01:05 2018 +0000 c61c8fc
Thu Jun 14 09:19:41 2018 +0000 2046e07
Thu Jun 14 08:26:38 2018 +0000 f205435
Thu Jun 14 08:26:29 2018 +0000 d4c70f1

然而,在过去的20分钟里,它只是停止为同一命令返回Thu Jun 14 08:26:29Thu Jun 14 08:26:38Thu Jun 14 09:19:41——所以现在我得到的是:

$ git --no-pager log --all --pretty='%ad %h' --after 2018-06-14
Wed Jul 4 16:56:04 2018 +0000 bec8f1c
Wed Jul 4 16:10:24 2018 +0000 dd51181
Wed Jun 20 18:31:47 2018 +0000 8b7ca2a
Wed Jun 20 18:11:11 2018 +0000 9a32592
Wed Jun 20 17:10:17 2018 +0000 2454ee0
Wed Jun 20 16:56:22 2018 +0000 b77dee4
Tue Jun 19 21:40:13 2018 +0000 c9dc470
Tue Jun 19 19:20:31 2018 +0000 baceab3
Tue Jun 19 18:30:11 2018 +0000 89ab6c2
Tue Jun 19 17:35:19 2018 +0000 a95553d
Thu Jun 14 10:01:05 2018 +0000 c61c8fc

发生了什么,为什么这些提交不再有效?我想,如果这是一个更大的回购,有很多分支机构/贡献者等,那么达到不一致状态的机会会更多,这会更容易理解——但在这种情况下,其中甚至没有任何内容,只有空的提交?!它甚至不能达到任何不一致的状态,因为我一直在删除它,并从脚本中重新创建它???!!

有人知道这可能是什么原因吗?我如何让git再次用--after 2018-06-14显示6月14日星期四的所有提交,就像我以前调用该命令一样?!

顺便说一句,上面链接的帖子确实提到了--full-history,但在这里帮助不大:

git --no-pager log --full-history --all --pretty='%ad %h' --after 2018-06-14

返回的结果与我在上面为没有--full-history的调用发布的结果完全相同。

编辑:如果我使用--after '2018-06-14 00:00:00',我可以返回显示所有这四个提交,但我百分之百肯定,在遇到这个问题之前,我从未在这种形式中使用过这个命令。如果你不在--after中指定小时数,git可能会随机分配它们——如果git随机选择00:00:00来填写小时数,我整晚都很"幸运"?

Git的日期解析器使用本地时间作为基准,尝试为午夜zulu指定--after 2018-06-13T00:00Z(或者为午夜本地省略Z)。

最新更新