Git 如何记录——自从计算?

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

$ 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

第一个选择的提交是来自 2013-01-30 01:30:00.8的 a95527f36a533e1ecba1aadceea31a9dcbe1a8db提交被选中:

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

好的。现在我从 2013-01-31开始选择:

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

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

但是让我们继续:

$ 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

现在,当我也编写起始时间时,起始时间的提交是 包括

我不明白其中的逻辑,有谁能解释一下,为什么这么奇怪?

谢谢

118503 次浏览

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

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 --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)