107

显然是:

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

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

4

5 回答 5

145

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

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

另请参阅此处

于 2017-03-14T19:51:33.157 回答
54

你不能——至少,不能只在 Git 中。(提醒其他访问此问题的人:这不是关于查看作者日期,而是关于按作者日期选择提交,a la --since/--after--until/ --before。这些选择器使用提交者日期,而不是作者日期。考虑作为一个极端示例提交制作为“现在”,因此其提交者日期为 2000 年代,但在作者日期字段中回溯到 1999 年的某一天。如果您的选择范围是“世纪之交附近的任何时间”,您将- 选择这个提交,因为它的提交日期是“现在”,比 1999 年十多年。)

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

全局切换git rev-list, like--use-author-date可以作为一个简单的补丁工作,并且不会太难添加到 Git,但我认为最好有--min-author-age--max-author-age或类似的,以及“按作者日期排序”标志(独立于通用--topo-order标志,因此设置两个标志具有与 ) 相同的效果--author-date-order

作为一种解决方法,您可以列出所有可能感兴趣的提交(使用git rev-list或等效的,例如git log:使用任何说明符使提交可能感兴趣,日期过滤器除外:在这​​种情况下,就是--all)并提取所有作者日期字段(使用git log --format=%at或其他),然后自己修剪提交 ID 列表,然后将剩余的提交 ID 重新提交到git log --no-walk. 但这充其量是痛苦的。有关更多信息,请参见使用 awk 的 Tim Beigeleisen 的回答

于 2016-05-18T23:41:52.627 回答
40

可以

但正如@torek 提到的,你可能无法用纯 Git 做到这一点。一种选择是从git loginto管道输出一些漂亮的格式输出awk,并在那里检查作者日期:

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

在这里,%ad以 ISO 格式给出作者日期,并%aN给出作者姓名。

于 2016-05-18T23:51:21.510 回答
5

受蒂姆·比格莱森上述回答的启发。

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 log上,需要的时候可以添加%H获取gitsha

于 2020-06-25T01:30:55.993 回答
2

对于那些寻找快速复制和粘贴解决方案的人:

git log --pretty='%aI %H' | \
    awk '$1 >= "<after-date>" && $1 <= "<before-date>" { print $2 }' | \
    git log --no-walk --stdin

笔记:

  • <after-date>或部分可以根据<before-date>需要省略
  • 日期必须采用严格的 ISO 格式(YYYY-MM-DDThh:mm:ss例如2021-04-20T13:30:00
  • --after日期可能会被截断,但与/类似--before,它们总是会向下舍入到准确的时间。因此,要查找特定日期的所有提交,例如,需要以下内容之一:
    • $1 >= "2021-04-20T00:00:00" && $1 <= "2021-04-20T23:59:59"
    • $1 >= "2021-04-20" && $1 < "2021-04-21"(注意<而不是<=
  • 日期比较不考虑时区。如果 repo 有来自不同时区的提交并且您需要精度,请使用您的本地时区git log --date=iso-strict-local --pretty='%ad %H',或者您可以通过 unix 时间戳指定日期并使用%at.

基于torek的这个答案Mr_and_Mrs_DTim Biegeleisen也做出了贡献(都参与了这个问题)。

于 2021-08-24T20:23:15.323 回答