git log --since 是如何计数的?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/14618022/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-10 15:23:50  来源:igfitidea点击:

How does git log --since count?

gitgit-log

提问by automatix

I have a simple test repository with just several commits and want to see the date&time filtered log:

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

$ git log --author="automatix" --since="2013-01-30" --pretty -- test
commit ea0719bef142659fa561c9d040b2120012ed0184
Date:   Thu Jan 31 02:03:12 2013 +0100

commit ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304
Date:   Thu Jan 31 01:59:11 2013 +0100

commit a0b027beba2cd03571bb9475b9db9542f8efe990
Date:   Thu Jan 31 01:50:38 2013 +0100

commit add77c8fe2ba9254c11b98e14facede3420dc51c
Date:   Thu Jan 31 01:48:34 2013 +0100

commit e6e323c05d37c74fcabeb9186b95c0d49b862e6f
Date:   Thu Jan 31 01:46:27 2013 +0100

commit 8c286391e54d3fc1e210950b1320fd6f013a8f84
Date:   Thu Jan 31 01:41:27 2013 +0100

commit 9c880595e57f717383796fa2940f41f0f42f7e2a
Date:   Thu Jan 31 01:38:17 2013 +0100

commit a95527f36a533e1ecba1aadceea31a9dcbe1a8db
Date:   Thu Jan 31 01:30:00 2013 +0100

The first selected commit is a95527f36a533e1ecba1aadceea31a9dcbe1a8dbfrom 2013-01-30 01:30:00. 8 commits are selected:

第一个选定的提交a95527f36a533e1ecba1aadceea31a9dcbe1a8db来自2013-01-30 01:30:00. 选择了 8 个提交:

$ git log --author="automatix" --since="2013-01-30" --format=oneline -- test | wc
      8      34     498

OK. Now I select since 2013-01-31:

好的。现在我选择2013-01-31

$ git log --author="automatix" --since="2013-01-31" --format=oneline -- test | wc
      0       0       0

What? Ok, that should mean, that the sincerule excludesthe commits of the startdate. Right?

什么?好的,这应该意味着,该since规则排除了开始日期的提交。对?

But let's go on:

但让我们继续:

$ git log --author="automatix" --since="2013-01-31 01:30:00" --pretty -- test
commit ea0719bef142659fa561c9d040b2120012ed0184
Date:   Thu Jan 31 02:03:12 2013 +0100

commit ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304
Date:   Thu Jan 31 01:59:11 2013 +0100

commit a0b027beba2cd03571bb9475b9db9542f8efe990
Date:   Thu Jan 31 01:50:38 2013 +0100

commit add77c8fe2ba9254c11b98e14facede3420dc51c
Date:   Thu Jan 31 01:48:34 2013 +0100

commit e6e323c05d37c74fcabeb9186b95c0d49b862e6f
Date:   Thu Jan 31 01:46:27 2013 +0100

commit 8c286391e54d3fc1e210950b1320fd6f013a8f84
Date:   Thu Jan 31 01:41:27 2013 +0100

commit 9c880595e57f717383796fa2940f41f0f42f7e2a
Date:   Thu Jan 31 01:38:17 2013 +0100

commit a95527f36a533e1ecba1aadceea31a9dcbe1a8db
Date:   Thu Jan 31 01:30:00 2013 +0100
$ git log --author="automatix" --since="2013-01-31 01:30:00" --format=oneline -- test | wc
      8      34     498

Now, when I'm writing the starttime as well, the commits of the starttime are included.

现在,当我也在编写 starttime 时,包含了 starttime 的提交。

I don't understand the logic. Can anybody explain, why it works so strange?

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

Thanks

谢谢

回答by gMale

In case it helps someone else who lands here like I did, after a bit of researching I found out that using ISO8601 formatalso works:

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

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

This will give you precision down to the second. Note: you can also use:

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

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"

etc.

等等。

Of course, this doesn't "explain why it works so strange." However, it certainly solved the problem for me.

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



EDIT:

编辑:

After a bit more research, I found out "why it works so strangely":
It turns out that when you don't specify a date format, git log defaults to either the author's timezone or commit dates, meaning for consistent behavior, it's useful to explicitly declare your date format with something like:

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

git log --date=local

Lastly, when you don't specify a time, it defaults to your local time when you ran the command.

最后,当您不指定时间时,它默认为您运行命令时的本地时间。

Long story short, being specific should solve the problem:

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

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

Also, you can set the default date format permanently with the following command:

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

git config log.date local

you can use any one of these values: (relative|local|default|iso|rfc|short|raw)

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