显然这:
git log --all --after="<date> 00:00" --before="<date> 23:59" --author="<author>"
根据提交者日期过滤提交。如何使其显示指定作者日期范围内的提交?
显然这:
git log --all --after="<date> 00:00" --before="<date> 23:59" --author="<author>"
根据提交者日期过滤提交。如何使其显示指定作者日期范围内的提交?
Answers:
您不能-至少不能仅在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的答案。
也许我缺少了一些东西,但这还不够吗?
git log --pretty=format:"%ad - %an: %s" --after="2016-01-31" --until="2017-03-10" --author="John Doe"
也请看这里
%ad
指令将向您显示此创作于1999年的提交,即使那是在2016年之前!
你可以。
但是正如@torek所述,您可能无法使用纯Git做到这一点。一种选择是将一些漂亮的格式输出从传送git log
到awk
,然后在此处检查作者日期:
git log --date=iso --pretty=format:'%ad%x08%aN' | awk '$0 >= "2013-01-01" && $0 <= "2013-12-01"'
在此,%ad
以ISO格式提供作者日期,并%aN
提供作者名称。
受到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
git log --all --date=iso --pretty=format:'%ad - %aN : %s' | grep 2020-09 | sort -u