git如何记录-自计数?


85

我有一个仅包含几次提交的简单测试存储库,并且想查看过滤了日期和时间的日志:

$ git log --author =“ automatix” --since =“ 2013-01-30” --pretty-测试
提交ea0719bef142659fa561c9d040b2120012ed0184
日期:2013年1月31日星期四02:03:12 +0100

提交ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304
日期:2013年1月31日星期四01:59:11 +0100

提交a0b027beba2cd03571bb9475b9db9542f8efe990
日期:2013年1月31日星期四01:50:38 +0100

提交add77c8fe2ba9254c11b98e14facede3420dc51c
日期:2013年1月31日星期四01:48:34 +0100

提交e6e323c05d37c74fcabeb9186b95c0d49b862e6f
日期:2013年1月31日星期四01:46:27 +0100

提交8c286391e54d3fc1e210950b1320fd6f013a8f84
日期:2013年1月31日星期四01:41:27 +0100

提交9c880595e57f717383796fa2940f41f0f42f7e2a
日期:2013年1月31日星期四01:38:17 +0100

提交a95527f36a533e1ecba1aadceea31a9dcbe1a8db
日期:2013年1月31日星期四01:30:00 +0100

首次选择的提交a95527f36a533e1ecba1aadceea31a9dcbe1a8db来自2013-01-30 01:30:00。选择了8个提交:

$ git log --author =“ automatix” --since =“ 2013-01-30” --format = oneline-测试| 厕所
      8 34 498

好。现在我选择,因为2013-01-31

$ git log --author =“ automatix” --since =“ 2013-01-31” --format = oneline-测试| 厕所
      0 0 0

什么?好的,这意味着该since规则不包括开始日期的提交。对?

但是,让我们继续:

$ git log --author =“ automatix” --since =“ 2013-01-31 01:30:00” --pretty-测试
提交ea0719bef142659fa561c9d040b2120012ed0184
日期:2013年1月31日星期四02:03:12 +0100

提交ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304
日期:2013年1月31日星期四01:59:11 +0100

提交a0b027beba2cd03571bb9475b9db9542f8efe990
日期:2013年1月31日星期四01:50:38 +0100

提交add77c8fe2ba9254c11b98e14facede3420dc51c
日期:2013年1月31日星期四01:48:34 +0100

提交e6e323c05d37c74fcabeb9186b95c0d49b862e6f
日期:2013年1月31日星期四01:46:27 +0100

提交8c286391e54d3fc1e210950b1320fd6f013a8f84
日期:2013年1月31日星期四01:41:27 +0100

提交9c880595e57f717383796fa2940f41f0f42f7e2a
日期:2013年1月31日星期四01:38:17 +0100

提交a95527f36a533e1ecba1aadceea31a9dcbe1a8db
日期:2013年1月31日星期四01:30:00 +0100
$ git log --author =“ automatix” --since =“ 2013-01-31 01:30:00” --format = oneline-测试| 厕所
      8 34 498

现在,当我写的开始时间为好,开始时间的提交都会被纳入

我不明白逻辑。谁能解释,为什么它如此奇怪?

谢谢


1
确实非常有趣。如果您只提供没有时间的日期,则默认为一天的最后一秒,这对我来说很有意义。感谢您发布此信息。很有意思!
ilan berci 2013年

1
是的,似乎如此,它没有时间默认为一天的最后一秒。坦格,但没问题。但是随后,当提供没有秒的时间时,Git应该也这样做。因此,git log --author="automatix" --since="2013-01-31 01:30" --pretty -- test 应满足7个提交的结果 。但是它的内容是8。 git log --author="automatix" --since="2013-01-31 01:30" --format=oneline -- test | wc=> 8 34 498
automatix

我不同意。当我说“…发生在星期一之后”时,我的意思是“发生在星期一的最后一秒之后” –“星期一”代表24小时。当我说“在9点之后发生”时,我的意思是“在9:00:00.0000之后发生” –“ 9点之间”是一个时间点,而不是时间跨度。Git的解释最有意义。
年度

2
这是一个好点。我会说,这种逻辑仅适用于“之后”-不适用于“自”。但是在Git中,关键字“因为”和“之后”是同义词(我发现它在语言上很脏)。git-scm.com/book/en/…–
automatix

Answers:


135

如果它可以像我一样帮助到这里的其他人,经过一些研究,我发现使用ISO8601格式也可以:

git log --since="2014-02-12T16:36:00-07:00"

这将使您精确到秒。注意:您也可以使用:

git log --after="2014-02-12T16:36:00-07:00"
git log --before="2014-02-12T16:36:00-07:00"
git log --since="1 month ago"
git log --since="2 weeks 3 days 2 hours 30 minutes 59 seconds ago"

等等

当然,这并不是“解释它为何如此奇怪的原因”。但是,它肯定为我解决了问题。


编辑:

经过更多的研究,我发现“为什么它如此奇怪”:
事实证明,当您不指定日期格式时,git log默认为作者的时区或commit date,这意味着行为一致,这很有用用类似以下内容的方式显式声明您的日期格式:

git log --date=local

最后,如果您未指定时间,则默认为您运行命令时的本地时间。

长话短说,具体应该解决问题:

git log --date=local --after="2014-02-12T16:36:00-07:00"

另外,您可以使用以下命令永久设置默认日期格式:

git config log.date local

您可以使用以下任一值: (relative|local|default|iso|rfc|short|raw)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.