来自git log的奇怪行为 - 因为

时间:2013-09-20 06:34:50

标签: git

我有一个包含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

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

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

我对此一无所知。所以我在SO上搜索了一下,发现this问题。在评论中,它说明了

  

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

好的,没问题。我们试试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只显示2013年9月19日之后发生的提交吗?

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

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只使用最后两个: - 分隔数字。但是为什么git会显示20.09.2013 08:00之后发生的提交,如果它似乎认为实际上我正在寻找20.09.201312 08:00之后的提交?这对我没有任何意义。

任何人都可以向我解释这个烂摊子吗?并不是我没有解决方案来解决我的问题,但我想了解,这里发生了什么......

1 个答案:

答案 0 :(得分:12)

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

  

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

基于Git help log

  

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

     

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

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

现在,回到你关于--since的问题。

如果--since=<date>没有特定时间,则会在您运行此命令时使用当地时间

例如,

--since "20-09-2013"

在09AM运行此命令时,将充当

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

所以,这就是为什么它在当天没有提交一些提交的原因。 (因为它已经过了你当前的时间)

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

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

回到神秘故事

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

  

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

     

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

     

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

     

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

我猜你从2013年9月20日08:04:13开始运行此命令。(根据你的提示,当你今天使用,它什么都没有显示。)。< / p>