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

标签 git

我有一个包含 18 个提交的测试存储库。 git 日志 | 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问题。在评论中指出

seems so, that it without a time it defaults to the last second of the day.

好的,没问题。让我们试试 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.2013 08:00 之后发生的提交,如果它似乎认为实际上我正在寻找 20.09.201312 08:00 之后的提交?这对我来说没有任何意义。

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

最佳答案

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

--date=default shows timestamps in the original timezone (either committer’s or author’s).

基于 Git help log

--date=local shows timestamps in user’s local timezone.

--date=default shows timestamps in the original timezone (either committer’s or author’s).

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

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

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

例如,

--since "20-09-2013"

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

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

所以,这就是为什么它没有在那天做出一些 promise 的原因。 (因为已经过了你现在的时间)

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

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

回到悬疑故事

所以,现在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

我猜你从 2013 年 9 月 20 日 08:04:13 之后运行了这个命令。(根据你的提示,当你使用 since today 时,它没有显示任何内容。)。

关于git - 来自 git log --since 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18910305/

相关文章:

git - 按提交/merge 日期排序 git diff --name-only list

git - 使用 Gulp.js 将版本化和构建(缩小)的文件正确提交到 GitHub

git - 如何要求确认 git reset --hard?

git - 无法使用 Powershell 推送到 github

git - 我如何禁用这种烦人的 git 评论强制执行

git - 将现有项目推送到 github 删除了现有的自述文件

git - 如何将修改和重命名提交拆分为 git 中的单独提交?

git - 使用 GitHub Pull Request Builder 触发多个 Jenkins 构建

python - 如何在 Python 脚本中 stash 个人数据

git - 为什么非裸远程的 `git push` 不是远程的 `git fetch` 的对偶