特定作者的 git 格式补丁 X.Y

  • 本文关键字:格式 补丁 git git patch
  • 更新时间 :
  • 英文 :


我想知道您是否可以为某个范围生成补丁,但仅限于特定作者的提交,就像您使用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>"及其所有以"^"为前缀的父项以排除它们(及其祖先)相同。

最新更新