如何计算`git log –since`?

我有一个简单的testing存储库只有几个提交,并希望看到date和时间过滤日志:

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

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

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

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

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

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

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

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

第一个select的提交是从2013-01-30 01:30:00 。 select了8个提交:

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

好。 现在我select2013-01-31

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

什么? 好的,那应该是说, since规则排除了startdate的提交。 对?

但是让我们继续:

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

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

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

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

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

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

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

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

现在,当我写入开始时间的时候, 包含了开始时间的提交。

我不明白这个逻辑。 谁能解释一下,为什么这么奇怪?

谢谢

如果像我这样帮助别人来到这里,经过一番研究,我发现使用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" 

等等

当然,这不是“解释为什么它如此奇怪”。 但是,它确实为我解决了这个问题。


编辑:

经过多一点研究后,我发现“为什么它奇怪地工作”:
事实certificate,当你不指定date格式时, git log默认为作者的时区或提交date ,这意味着一致的行为,这是有用的显式声明你的date格式类似于:

 git log --date=local 

最后,如果不指定时间,则在运行命令时默认为当地时间。

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

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

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

 git config log.date local 

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