102

我有一个简单的测试存储库,只有几个提交,并希望查看日期和时间过滤日志:

$ git log --author="automatix" --since="2013-01-30" --pretty --test
提交 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 --test | 厕所
      8 34 498

好的。现在我选择2013-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
日期: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 --test | 厕所
      8 34 498

现在,当我也在编写 starttime 时, starttime 的提交也包括在内

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

谢谢

4

1 回答 1

163

如果它可以帮助像我一样登陆这里的其他人,经过一番研究,我发现使用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 默认为作者的时区或提交日期,这意味着一致的行为,它很有用使用以下内容明确声明您的日期格式:

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)

于 2014-02-13T02:23:27.427 回答