我想知道您是否可以为某个范围生成补丁,但仅限于特定作者的提交,就像您使用git log --author='bob'
一样。
是的,这是可能的。
根据参考资料git format-patch
它接受<revision range>
泛型表达式(请参阅"指定修订" gitrevisions(7)) 中的部分表示指定范围内的提交。
详细信息可以在参考中找到,但我们只需要这个:
^!,例如头^!
后缀 ^ 后跟感叹号与给出 commit 相同,然后其所有父项都以 ^ 为前缀以排除它们 (和他们的祖先)。
因此,您需要:
git log X..Y --author='<AUTHOR>' --format="%H" | sed 's/$/^!/g' | xargs -I{} git format-patch {}
git log X..Y --author='<AUTHOR>' --format="%H"
以 40 位 sha1 和的格式生成输出。
sed 's/$/^!/g'
在每行末尾添加 ^!
xargs -I{} git format-patch {}
每行都运行git format-patch
请注意,jdknight 在注释中提出的修改后的解决方案涉及 --reverse
。
git log --author='<AUTHOR>' --format="%H" --reverse |
sed 's/$/^!/g' | nl -w 1 -s ' ' |
xargs -I{} sh -c "git format-patch --start-number {}"
这是一个订单问题,在 Git 2.39(2022 年第 4 季度)中突出显示,"git diff
"(man)rev^! 没有显示组合差异以转到其父级的修订版。
请参阅提交 a79c6b6、提交 9f91da7、提交 793c211 (01 Oct 2022) by René Scharfe ( rscharfe
).
(由 Junio C Hamano -- gitster
-- 合并于 提交 b988427,2022 年 10 月 25 日)
revisions.txt
:未指定^!
已解析部分的顺序签名:勒内·沙尔夫
gitrevisions(7) 说
<rev>^!
解析为<rev>
然后解析为<rev>
.
的所有父级revision.c::handle_revision_arg_1()
实际上首先添加所有父项,然后<rev>
.
更改文档以保留未指定的顺序,以避免误导读者。
revisions
现在在其手册页中包含:
<rev>^!
,例如HEAD^!
:后缀"
^
"后跟感叹号与给提交"<rev>
"及其所有以"^
"为前缀的父项以排除它们(及其祖先)相同。