如何让 git 显示作者日期指定日期范围内的提交?
How to get git to show commits in a specified date range for author date?
显然this:
git log --all --after="<date> 00:00" --before="<date> 23:59" --author="<author>"
根据提交者日期过滤提交。如何让它显示指定作者日期范围内的提交?
你不能——至少,不能单独 Git。 (提醒访问此问题的其他人:这与 查看 作者日期无关,而是关于 select 提交 作者日期, la --since
/--after
和 --until
/--before
。这些 selector 使用 committer 日期,而不是作者日期。考虑一个极端的例子,一个提交 "now",所以它的提交者日期在 2000 年代,但在作者日期字段中回溯到 1999 年的某一天。如果你的 select离子范围是 "any time near the turn of the century" 您将删除 select 这个提交,因为它的提交日期是 "now",超过 1999 年十多年。)
我认为这是 Git 中的一个小错误:您应该能够在任何您可以请求它使用提交者日期字段的地方请求它使用作者日期字段。使用 日志格式 很容易,因为我们有 %ad
和 %cd
等,但使用 commit selection 是不可能的。最接近的是 git rev-list
可以按作者日期排序(在一般拓扑排序中)。
git rev-list
中的全局开关,如 --use-author-date
,将作为一个简单的补丁工作,并且添加到 Git 中不会太难,但我认为它会最好有 --min-author-age
和 --max-author-age
或类似的,以及 "sort by author date" 标志(独立于一般 --topo-order
标志,以便设置 both 标志与 --author-date-order
).
具有相同的效果
作为一种解决方法,您可以列出所有可能感兴趣的提交(使用 git rev-list
或等效项,例如 git log
:使用任何说明符使提交可能感兴趣,日期过滤器除外:在此case that's just --all
) and extract all their author-date fields (with git log --format=%at
or whatever), 然后自己修剪提交 ID 列表,然后将剩余的提交 ID 重新提交到git log --no-walk
。但这充其量是痛苦的。有关更多信息,请参阅 。
你可以。
但是正如@torek 提到的,您可能无法使用纯 Git 来做到这一点。一种选择是将一些漂亮的格式输出从 git log
传输到 awk
,并在那里检查作者日期:
git log --date=iso --pretty=format:'%ad%x08%aN' | awk '[=10=] >= "2013-01-01" && [=10=] <= "2013-12-01"'
这里,%ad
给出了ISO格式的作者日期,%aN
给出了作者姓名。
也许我遗漏了什么,但这还不够吗?
git log --pretty=format:"%ad - %an: %s" --after="2016-01-31" --until="2017-03-10" --author="John Doe"
另见 here
灵感来自 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 --pretty='%aI %H' | \
awk ' >= "<after-date>" && <= "<before-date>" { print }' | \
git log --no-walk --stdin
备注:
<after-date>
或 <before-date>
部分可以根据需要省略
- 日期必须采用严格的 ISO 格式(
YYYY-MM-DDThh:mm:ss
例如 2021-04-20T13:30:00
)
- 日期可能会被截断,但与
--after
/--before
类似,它们将始终向下舍入为准确时间。因此,例如,要查找特定日期的所有提交,需要以下内容之一:
>= "2021-04-20T00:00:00" && <= "2021-04-20T23:59:59"
>= "2021-04-20" && < "2021-04-21"
(注意<
而不是<=
)
- 日期比较不考虑时区。如果 repo 有来自不同时区的提交并且您需要精度,请使用您的本地时区
git log --date=iso-strict-local --pretty='%ad %H'
,或者您可以通过 unix 时间戳指定日期并使用 %at
.
基于 by torek, which was also contributed to by Mr_and_Mrs_D and Tim Biegeleisen(所有涉及此问题)。
显然this:
git log --all --after="<date> 00:00" --before="<date> 23:59" --author="<author>"
根据提交者日期过滤提交。如何让它显示指定作者日期范围内的提交?
你不能——至少,不能单独 Git。 (提醒访问此问题的其他人:这与 查看 作者日期无关,而是关于 select 提交 作者日期, la --since
/--after
和 --until
/--before
。这些 selector 使用 committer 日期,而不是作者日期。考虑一个极端的例子,一个提交 "now",所以它的提交者日期在 2000 年代,但在作者日期字段中回溯到 1999 年的某一天。如果你的 select离子范围是 "any time near the turn of the century" 您将删除 select 这个提交,因为它的提交日期是 "now",超过 1999 年十多年。)
我认为这是 Git 中的一个小错误:您应该能够在任何您可以请求它使用提交者日期字段的地方请求它使用作者日期字段。使用 日志格式 很容易,因为我们有 %ad
和 %cd
等,但使用 commit selection 是不可能的。最接近的是 git rev-list
可以按作者日期排序(在一般拓扑排序中)。
git rev-list
中的全局开关,如 --use-author-date
,将作为一个简单的补丁工作,并且添加到 Git 中不会太难,但我认为它会最好有 --min-author-age
和 --max-author-age
或类似的,以及 "sort by author date" 标志(独立于一般 --topo-order
标志,以便设置 both 标志与 --author-date-order
).
作为一种解决方法,您可以列出所有可能感兴趣的提交(使用 git rev-list
或等效项,例如 git log
:使用任何说明符使提交可能感兴趣,日期过滤器除外:在此case that's just --all
) and extract all their author-date fields (with git log --format=%at
or whatever), 然后自己修剪提交 ID 列表,然后将剩余的提交 ID 重新提交到git log --no-walk
。但这充其量是痛苦的。有关更多信息,请参阅
你可以。
但是正如@torek 提到的,您可能无法使用纯 Git 来做到这一点。一种选择是将一些漂亮的格式输出从 git log
传输到 awk
,并在那里检查作者日期:
git log --date=iso --pretty=format:'%ad%x08%aN' | awk '[=10=] >= "2013-01-01" && [=10=] <= "2013-12-01"'
这里,%ad
给出了ISO格式的作者日期,%aN
给出了作者姓名。
也许我遗漏了什么,但这还不够吗?
git log --pretty=format:"%ad - %an: %s" --after="2016-01-31" --until="2017-03-10" --author="John Doe"
另见 here
灵感来自 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 --pretty='%aI %H' | \
awk ' >= "<after-date>" && <= "<before-date>" { print }' | \
git log --no-walk --stdin
备注:
<after-date>
或<before-date>
部分可以根据需要省略- 日期必须采用严格的 ISO 格式(
YYYY-MM-DDThh:mm:ss
例如2021-04-20T13:30:00
) - 日期可能会被截断,但与
--after
/--before
类似,它们将始终向下舍入为准确时间。因此,例如,要查找特定日期的所有提交,需要以下内容之一:>= "2021-04-20T00:00:00" && <= "2021-04-20T23:59:59"
>= "2021-04-20" && < "2021-04-21"
(注意<
而不是<=
)
- 日期比较不考虑时区。如果 repo 有来自不同时区的提交并且您需要精度,请使用您的本地时区
git log --date=iso-strict-local --pretty='%ad %H'
,或者您可以通过 unix 时间戳指定日期并使用%at
.
基于