在这里找到了类似的东西:
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-14
从Thu 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:29
、Thu Jun 14 08:26:38
和Thu 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)。