【问题标题】:Strange behavior from git log --since来自 git log --since 的奇怪行为
【发布时间】:2013-09-25 11:02:43
【问题描述】:

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

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

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

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

谁能给我解释一下这个烂摊子?不是我没有办法解决我的问题,而是我想了解一下,这里发生了什么……

【问题讨论】:

  • @krlmlr OP 评论了一个现已删除的答案,它是相同的,+0200。
  • 在我的系统上测试建议--since 查看提交日期,而不是作者日期。 git log 默认只显示作者日期。你能用git log --format=fuller检查提交日期是否不同吗?
  • @hvd 我检查过,似乎每次提交时AuthorDateCommitDate 完全相同。

标签: git


【解决方案1】:

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

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

基于Git help log

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

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

我建议你运行git log --date=local --since=&lt;your date&gt;。它应该显示本地机器时间内的所有提交。

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

如果--since=&lt;date&gt; 没有具体时间,它将使用您运行此命令时的当地时间

例如,

--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 开始运行这个命令。(根据你的提示,当你使用 从今天开始时,它什么也没显示。)。

【讨论】:

  • 嗯,这是一些奇怪的行为......但感谢您的启发:D
猜你喜欢
  • 2019-01-27
  • 1970-01-01
  • 2013-01-15
  • 2020-02-10
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多