如何使用 git log --since 产生可靠的结果

问题描述

我需要运行 git log显示特定日期和时间之后的所有提交,并且不遗漏任何提交,并且无需运行 git log显示 所有 提交,因为后者太慢(因为这应该在 git IMO 中工作)。

但是,将其标记为重复之前,请考虑我已尽可能仔细地阅读以下所有内容

  1. What is the format for --date parameter of git commit
  2. git log --since=<date> options
  3. Strange behavior from git log --since
  4. How does git log --since count?

这是我试过的:

$ git --version
git version 2.31.1
$ date
Tue May 18 08:55:45 PDT 2021
$ git log --date=iso-local --format='%ad %<(20)%ar %H' --since='2021-04-01' | grep 2021-04- | tail -1
$ git log --date=iso-local --format='%ad %<(20)%ar %H' --since='2021-04-01 00:00' | grep 2021-04- | tail -1
$ git log --date=iso-local --format='%ad %<(20)%ar %H' --since='2021-04-01 00:00:00' | grep 2021-04- | tail -1
$ git log --date=iso-local --format='%ad %<(20)%ar %H' --since='2021-04-01T00:00:00' | grep 2021-04- | tail -1
$ git log --date=iso-local --format='%ad %<(20)%ar %H' --since='1 week ago' | grep 2021-04- | tail -1
$ git log --date=iso-local --format='%ad %<(20)%ar %H' --since='2 weeks ago' | grep 2021-04- | tail -1
$ git log --date=iso-local --format='%ad %<(20)%ar %H' --since='3 weeks ago' | grep 2021-04- | tail -1
$ git log --date=iso-local --format='%ad %<(20)%ar %H' --since='4 weeks ago' | grep 2021-04- | tail -1
$ git log --date=iso-local --format='%ad %<(20)%ar %H' --since='666 weeks ago' | grep 2021-04- | tail -1
2021-04-23 11:51:30 -0700 4 weeks ago          76044d3f08087add08ad1012ae1ee9a569679268
$ git log --date=local --format='%ad %<(20)%ar %H' --since='2021-04-01' | grep 2021-04- | tail -1
$ git log --date=local --format='%ad %<(20)%ar %H' --since='2021-04-01 00:00' | grep 2021-04- | tail -1
$ git log --date=local --format='%ad %<(20)%ar %H' --since='2021-04-01 00:00:00' | grep 2021-04- | tail -1
$ git log --date=local --format='%ad %<(20)%ar %H' --since='2021-04-01T00:00:00' | grep 2021-04- | tail -1
$ git log --date=local --format='%ad %<(20)%ar %H' --since='1 week ago' | grep 2021-04- | tail -1
$ git log --date=local --format='%ad %<(20)%ar %H' --since='2 weeks ago' | grep 2021-04- | tail -1
$ git log --date=local --format='%ad %<(20)%ar %H' --since='3 weeks ago' | grep 2021-04- | tail -1
$ git log --date=local --format='%ad %<(20)%ar %H' --since='4 weeks ago' | grep 2021-04- | tail -1
$ git log --date=local --format='%ad %<(20)%ar %H' --since='666 weeks ago' | grep 2021-04- | tail -1
$ git log --date=local --format='%ad %<(20)%ar %H' --since='666 weeks ago' | grep 2021-04- | tail -1
$ git log --date=default --format='%ad %<(20)%ar %H' --since='2021-04-01' | grep 2021-04- | tail -1
$ git log --date=default --format='%ad %<(20)%ar %H' --since='2021-04-01 00:00' | grep 2021-04- | tail -1
$ git log --date=default --format='%ad %<(20)%ar %H' --since='2021-04-01 00:00:00' | grep 2021-04- | tail -1
$ git log --date=default --format='%ad %<(20)%ar %H' --since='2021-04-01T00:00:00' | grep 2021-04- | tail -1
$ git log --date=default --format='%ad %<(20)%ar %H' --since='1 week ago' | grep 2021-04- | tail -1
$ git log --date=default --format='%ad %<(20)%ar %H' --since='2 weeks ago' | grep 2021-04- | tail -1
$ git log --date=default --format='%ad %<(20)%ar %H' --since='3 weeks ago' | grep 2021-04- | tail -1
$ git log --date=default --format='%ad %<(20)%ar %H' --since='4 weeks ago' | grep 2021-04- | tail -1
$ git log --date=default --format='%ad %<(20)%ar %H' --since='666 weeks ago' | grep 2021-04- | tail -1
$ git log --date=iso-local --format='%ad %<(20)%ar %H' | grep 2021-04- | tail -1
2021-04-01 00:00:13 -0700 7 weeks ago          657fa6a40cfd93c6d48a8aee4cc8190df753f6d7
$ git log --date=default --format='%ci %<(20)%ar %H' --since='2021-04-01' | grep 2021-04- | tail -1
$ git log --date=default --format='%ci %<(20)%ar %H' --since='2021-04-01 00:00' | grep 2021-04- | tail -1
$ git log --date=default --format='%ci %<(20)%ar %H' --since='2021-04-01 00:00:00' | grep 2021-04- | tail -1
$ git log --date=default --format='%ci %<(20)%ar %H' --since='2021-04-01T00:00:00' | grep 2021-04- | tail -1
$ git log --date=default --format='%ci %<(20)%ar %H' --since='1 week ago' | grep 2021-04- | tail -1
$ git log --date=default --format='%ci %<(20)%ar %H' --since='2 weeks ago' | grep 2021-04- | tail -1
$ git log --date=default --format='%ci %<(20)%ar %H' --since='3 weeks ago' | grep 2021-04- | tail -1
$ git log --date=default --format='%ci %<(20)%ar %H' --since='4 weeks ago' | grep 2021-04- | tail -1
$ git log --date=default --format='%ci %<(20)%ar %H' --since='666 weeks ago' | grep 2021-04- | tail -1
2021-04-23 18:51:30 +0000 4 weeks ago          76044d3f08087add08ad1012ae1ee9a569679268
$ git log --date=iso-local --format='%ci %<(20)%ar %H' | grep 2021-04- | tail -1
2021-04-01 00:00:13 -0700 7 weeks ago          657fa6a40cfd93c6d48a8aee4cc8190df753f6d7
$ 

我很困惑为什么我得到关于提交 76044d3f08087add08ad1012ae1ee9a569679268 的输出,而其他 --date=something 变体没有显示任何输出。当然,无论如何它都是错误输出

令人费解。

这是我不想经常求助的缓慢解决方法

$ git log --date=iso-local --format='%ad %<(20)%ar %H' | grep 2021-04- | tail -1
2021-04-01 00:00:13 -0700 7 weeks ago          657fa6a40cfd93c6d48a8aee4cc8190df753f6d7
$

在后一个命令中,Git 正在转储整个提交历史,只是为了让我必须过滤掉我正在寻找的结果。在这种情况下,git log 很慢,因为我的 git 存储库很大:

$ git log --date=iso-local --format='%ad %<(20)%ar %H' | wc -l
344841

在这里做错了什么?还是 --since 选项有缺陷?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)