【问题标题】:How does git log --since count?git log --since 怎么算?
【发布时间】:2013-01-15 02:18:40
【问题描述】:

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

$ 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

第一个选择的提交是来自2013-01-30 01:30:00a95527f36a533e1ecba1aadceea31a9dcbe1a8db。选择了 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 的提交也被包含

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

谢谢

【问题讨论】:

  • 确实很有趣.. 如果您只提供没有时间的日期,它默认为一天的最后一秒.. 但这只是我正在尝试的事情在。感谢您发布此信息。很有趣!
  • 是的,似乎是这样,它没有时间默认为一天的最后一秒。斯坦奇,但没问题。但是,当提供没有秒的时间时,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
  • 我不同意。当我说“……发生在星期一之后”时,我的意思是“发生在星期一的最后一秒之后”——“星期一”代表 24 小时的时间段。当我说“发生在 9 点之后”时,我的意思是“发生在 9:00:00.0000 之后”——“9 点”是一个时间点,而不是一个时间跨度。 Git 的解释是最有意义的。
  • 这是一个很好的观点。我想说,这个逻辑只适用于“之后”——而不是“自从”。但是在 Git 中,关键字“since”和“after”是同义词(我觉得它在语言上很脏)。 git-scm.com/book/en/…
  • Git 有两个日期作者日期提交日期。通常,作者日期和运行git log --pretty=fuller 中显示的内容显示了两个日期。 --since 开关适用于 提交日期更新 比提到的值。更多关于 git 日期 - stackoverflow.com/a/11857467/3940047

标签: git git-log


【解决方案1】:

如果它可以帮助像我一样登陆这里的其他人,经过一番研究,我发现使用 ISO8601 format 也可以:

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 defaults to either the author's timezone or commit dates(意味着行为一致)时,使用以下内容显式声明您的日期格式很有用:

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)

【讨论】:

  • unix 时间戳也可以。
猜你喜欢
  • 2019-01-27
  • 2018-01-06
  • 2013-09-25
  • 2014-03-30
  • 2011-07-12
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多