如何获取git以显示作者日期在指定日期范围内的提交?


81

显然

git log --all --after="<date> 00:00" --before="<date> 23:59" --author="<author>"

根据提交者日期过滤提交。如何使其显示指定作者日期范围内的提交?


Answers:


39

您不能-至少不能仅在Git中。(提醒其他访问此问题的人:不是要查看作者日期,而是要按作者日期la --since/--after--until/选择提交--before。这些选择器使用提交者日期,而不是作者日期。作为一个极端示例,考虑提交设为“现在”,以便其提交者日期为2000年代,但在作者日期字段中将其回溯到1999年的某一天。如果选择范围是“世纪之交” -选择此提交,因为其提交者日期为“现在”,比1999年晚了十多年。)

我认为这是Git中的一个小错误:您应该能够在任何可以要求它使用提交者日期字段的地方要求它使用作者日期字段。日志格式化很容易,因为我们有%ad%cd等,但是提交选择则不可能。我们拥有的最接近的是git rev-list可以按作者日期排序(在常规拓扑排序中)。

git rev-list像这样的全局开关--use-author-date可以作为一个简单的补丁,并且添加到Git不会太难,但是我认为最好具有--min-author-age--max-author-age或类似的功能,并带有“按作者日期排序”标志(独立于常规--topo-order标志,因此设置两个标志的效果与--author-date-order)相同。

解决方法是,您可以列出所有可能引起关注的提交(带有git rev-list或等价形式,例如git log:使用使说明者具有潜在兴趣的任何说明符,但日期过滤器除外:在这​​种情况下仅为--all)并提取其所有author-date字段(带有git log --format=%at或其他方法),然后对提交ID列表进行修剪,然后将其余提交ID重新提交给git log --no-walk。但这充其量是痛苦的。有关更多信息,请参见使用awk的Tim Beigeleisen的答案


感谢您的授权为我消除混乱-这困扰了我很长时间,并且确实花了很多时间浏览手册页以尝试查找不存在的开关。为此已经存在一个错误了吗?
Mr_and_Mrs_D

我不知道Git的人是否认为这是一个错误。请参阅github.com/git/git以获得邮件列表的链接。
torek's

118

也许我缺少了一些东西,但这还不够吗?

git log --pretty=format:"%ad - %an: %s" --after="2016-01-31" --until="2017-03-10" --author="John Doe"

请看这里


18
@RossSolomon:显示作者日期,但提交者日期进行选择。举一个极端的例子,假设我进行了一次提交,作者日期设置为1999,提交者日期设置为01-01-2017。该%ad指令将向您显示此创作于1999年的提交,即使那是在2016年之前!
torek

7
“也许我错过了一些东西”是的,整个问题要点。这将基于提交日期使用与OP完全相同的过滤方法,但仅在已经过滤出他们想要的内容后显示作者日期。18个人如何理解如此糟糕的阅读能力?
underscore_d

该命令不适用于--before和--after中的iso-8601日期格式。对我有用的格式是“ dd-mm-ccyy”。
hktegner

8
否决票是因为尽管这个答案通常很有用,但却无法解决问题。
ravron

2
即使它不能回答问题,但如果我偶然发现了这个答案并找到了解决我的类似但又不相同的问题的解决方案,那么我会赞成这样简单的答案。但是,这并不意味着应该接受答案,而且我了解有人对此表示反对。
Mefitico '19

30

可以

但是正如@torek所述,您可能无法使用纯Git做到这一点。一种选择是将一些漂亮的格式输出从传送git logawk,然后在此处检查作者日期:

git log --date=iso --pretty=format:'%ad%x08%aN' | awk '$0 >= "2013-01-01" && $0 <= "2013-12-01"'

在此,%ad以ISO格式提供作者日期,并%aN提供作者名称。


1
谢谢-我继续接受Torek的回答,因为它提供了更全面的答案,但您
对此表示赞同

2

受到Tim Biegeleisen上面答案的启发。

git log --all --date=iso --pretty=format:'%ad%x08%aN %s' | grep 2020-06-09 | sort -u

做了我需要的。我想要作者的日期,而不是提交日期,因为我要重新定位和压缩很多东西。但是我在导入提交上保留了重要的日期。

与此相关的是,我有一个小助手,允许我重置作者的电子邮件,但保留原始作者的日期。--reset-author默认情况下会覆盖作者的日期。

https://github.com/mathieujobin/git-scripts/blob/master/bin/git-reset-author-but-not-date

在上面的git日志上,如果需要,您可以添加%H以获取gitsha


1
%x08以漂亮的格式表示ascii 08,它是退格键,因此它吃掉了以前%ad的最后一位,即ISO格式的作者日期,因此,我使用了这种变体(在作者名后还添加了冒号):git log --all --date=iso --pretty=format:'%ad - %aN : %s' | grep 2020-09 | sort -u
icido
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.