针对特定作者的git format-patch X..Y

tir*_*adc 6 git patch

我想知道你是否可以为一个范围生成补丁,但只限制来自特定作者的提交,就像你一样git log --author='bob'.

Max*_*hev 9

对的,这是可能的.

根据基准git format-patch它接受<revision range>

通用表达式(请参阅gitrevisions(7)中的"指定修订"部分)表示指定范围内的提交.

细节可以在参考文献中找到,但我们只需要这个:

^ !,例如HEAD ^!

后缀为感叹号的后缀^与给出提交相同,然后其所有父项都以^为前缀以排除它们(以及它们的祖先).

所以你需要:

git log X..Y --author='<AUTHOR>' --format="%H" | sed 's/$/^!/g' | xargs -I{} git format-patch {}
Run Code Online (Sandbox Code Playgroud)

git log X..Y --author='<AUTHOR>' --format="%H" 以40位sha1总和的格式生成输出.

sed 's/$/^!/g'添加^!在每一行的末尾

xargs -I{} git format-patch {}只运行git format-patch每一行

  • 这个修改过的命令将有助于提供一个递增的数字:`git log --author ='<AUTHOR>' - format ="%H" - 反向| sed's/$/^!/ g'| nl -w 1 -s''| xargs -I {} sh -c"git format-patch --start-number {}"` (4认同)
  • 这很好用,唯一温和的问题是它打破了补丁命名中的增量数(即由于某种原因它们都以'0001`为前缀),但这在我的情况下并不是什么大问题.谢谢! (2认同)