8

我有一个包含 18 个提交的测试存储库。 git log | grep Date:返回以下内容:

Date:   Fri Sep 20 08:04:13 2013 +0200
Date:   Fri Sep 20 08:03:28 2013 +0200
Date:   Fri Sep 20 08:02:05 2013 +0200
Date:   Thu Sep 19 09:53:10 2013 +0200
Date:   Wed Sep 18 17:04:41 2013 +0200
Date:   Wed Sep 18 17:03:36 2013 +0200
Date:   Sat Sep 14 14:42:10 2013 +0200
Date:   Wed Sep 11 10:37:25 2013 +0200
Date:   Fri Aug 30 13:59:43 2013 +0200
Date:   Fri Aug 30 13:56:35 2013 +0200
Date:   Fri Aug 30 11:30:17 2013 +0200
Date:   Thu Aug 29 13:44:28 2013 +0200
Date:   Thu Aug 29 13:34:32 2013 +0200
Date:   Wed Aug 28 14:44:03 2013 +0200
Date:   Wed Aug 28 14:32:44 2013 +0200
Date:   Tue Aug 27 16:18:53 2013 +0200
Date:   Tue Aug 27 16:16:29 2013 +0200
Date:   Tue Aug 27 15:46:04 2013 +0200

我想从今天(20.09.2013)发生的所有提交中获取日志,所以我尝试了

git log --since=20-09-2013 | grep Date: 

我对此一无所获。所以我在这里搜索了一下,发现了这个问题。在评论中它指出

似乎是这样,它没有时间默认为一天的最后一秒。

好的没问题。让我们试试git log --since=19-09-2013。那返回

Date:   Fri Sep 20 08:04:13 2013 +0200
Date:   Fri Sep 20 08:03:28 2013 +0200
Date:   Fri Sep 20 08:02:05 2013 +0200
Date:   Thu Sep 19 09:53:10 2013 +0200

等等,这看起来很奇怪,不是吗?如果它应该使用指定日期的最后一秒,为什么它会显示09:53:10在该日期发生的提交?git 不应该只显示 19.09.2013 之后发生的提交吗?

但是等等,它变得更加陌生!我尝试添加时间,结果是

git log --since=20-09-201309:00:00 
Date:   Fri Sep 20 08:04:13 2013 +0200
Date:   Fri Sep 20 08:03:28 2013 +0200
Date:   Fri Sep 20 08:02:05 2013 +0200

就这样……等一下……所有的提交都发生在之前09:00:00。为什么 git 显示它们?事实上,据我所知,我也犯了语法错误!让我们尝试一些东西:

git log --since=20-09-201312:08:00 | grep Date:
Date:   Fri Sep 20 08:04:13 2013 +0200
Date:   Fri Sep 20 08:03:28 2013 +0200
Date:   Fri Sep 20 08:02:05 2013 +0200

仍然有效...

git log --since=20-09-201312:09:00 | grep Date:
<nothing>

嗯,那里发生了什么?似乎 git 只使用最后两个 : 分隔的数字。20.09.2013 08:00但是,如果 git似乎认为实际上我正在寻找之后的提交,为什么 git 会显示之后发生的提交20.09.201312 08:00呢?这对我来说没有任何意义。

谁能向我解释这个烂摊子?不是我没有解决我的问题的方法,而是我想了解,这里发生了什么......

4

1 回答 1

13

默认情况下,日期git log将以默认格式显示。

--date=default 显示原始时区(提交者或作者)的时间戳。

基于Git 帮助日志

--date=local 显示用户本地时区的时间戳。

--date=default 显示原始时区(提交者或作者)的时间戳。

我建议你跑git log --date=local --since=<your date>。它应该显示本地机器时间的所有提交。

现在,回到你关于--since.

如果--since=<date>没有具体时间,它将使用您运行此命令时的本地时间。

例如,

--since "20-09-2013"

当您在上午 9 点运行此命令时,将充当

--since "20-09-2013 09:00:00"

所以,这就是为什么它不会在那天出现一些提交。(因为它已经过了你现在的时间)

如果您想搜索今天的所有提交,请使用

--since "20-09-2013 00:00:00"

回到神秘故事

所以,现在git log --since=19-09-2013.返回

日期:2013 年 9 月 20 日星期五 08:04:13 +0200

日期:2013 年 9 月 20 日星期五 08:03:28 +0200

日期:2013 年 9 月 20 日星期五 08:02:05 +0200

日期:2013 年 9 月 19 日星期四 09:53:10 +0200

我猜你已经在 2013 年 9 月 20 日之后的 08:04:13 运行了这个命令。(根据你的提示,当你从今天开始使用时,它什么也没显示。)。

于 2013-09-20T07:20:22.247 回答