如何通过git log获取一系列可以自动应用的补丁?

时间:2016-08-08 22:45:50

标签: git patch

我想将complete history of Linux列为一系列补丁(统一差异格式),我可以自动处理从第一个补丁到今天的补丁。从理论上讲,这将允许我从日志中重建现代版本。为此我运行以下命令:

git -c diff.renameLimit=30000 log -m -M -C --pretty=tformat:'commit %H %ct' --topo-order --reverse -U0

不幸的是,似乎git log由于我提供的错误选项或由于错误而开始(在1280次提交之后)输出与前一状态不匹配的差异,因此无法应用自动(例如通过补丁)。

例如,运行git log -m -M -C --pretty=tformat:'commit %H %ct' --topo-order --reverse -U0 43acd296..9b7855ca -- drivers/usb/auerswald.c 生成 patch(1)不能应用于修订版43acd296的签出系统的差异。 (问题与连续日志输出时出现的问题相同。)相反,运行git diff -U0 43acd296 9b7855ca -- drivers/usb/auerswald.c会生成一个可以应用于修订版43acd296的差异而没有问题。

我是否应该为git log提供额外的选项以获得我想要的输出? (我尝试了--full-history,但问题仍然存在。)

1 个答案:

答案 0 :(得分:1)

您应该使用git format-patch

  

每次提交时,将每个提交及其补丁准备在一个文件中,格式化为类似于UNIX邮箱格式。此命令的输出便于电子邮件提交或与git am一起使用。

一般语法是:

git format-patch <revision range>

其中<revision range>可以是一系列提交,例如88236e3..40bc760

每次提交时,您将获得一个文件的输出,按顺序命名。