为特定的提交生成一个git补丁

我需要编写一个脚本来为SHA1提交编号列表创build补丁。

我尝试使用git format-patch <the SHA1> ,但是自从那个SHA1以来,每次提交都会生成一个补丁。 几百个补丁生成后,我不得不杀死这个进程。

有没有办法只为特定的SHA1生成补丁?

尝试:

 git format-patch -1 <sha> 

为了从特定sha1哈希的最顶层提交生成补丁:

 git format-patch -<n> <SHA1> 

从单个补丁文件头开始的最后10个补丁:

 git format-patch -10 HEAD --stdout > 0001-last-10-commits.patch 

假设您在提交1之后提交了id 2,您将能够运行:

 git diff 2 1 > mypatch.diff 

其中2和1是SHA散列。

这个命令(正如@ Naftuli Tzvi Kay所build议的那样 ):

 git format-patch -1 HEAD 

用特定的散列或范围replaceHEAD

将生成格式化为类似于UNIX邮箱格式的最新提交的修补程序文件。

-<n> – 从最上面的提交中准备补丁。

然后,您可以通过以下邮箱格式重新应用修补程序文件:

 git am -3k 001*.patch 

请参阅: man git-format-patch

 git format-patch commit_Id~1..commit_Id git apply patch-file-name 

快速简单的解决scheme。

如果你想确保(单个提交)补丁将被应用在特定的提交之上,你可以使用新的git 2.9(2016年6月)选项git format-patch --base

 git format-patch --base=COMMIT_VALUE~ -M -C COMMIT_VALUE~..COMMIT_VALUE # or git format-patch --base=auto -M -C COMMIT_VALUE~..COMMIT_VALUE # or git config format.useAutoBase true git format-patch -M -C COMMIT_VALUE~..COMMIT_VALUE 

参见叶小龙 (“)的 提交bb52995 , 提交3de6651 , 提交fa2ab86 , 提交ded2c09 (2016年4月26日) 。
(由Junio C gitster合并- gitster -在承诺72ce3ff ,2016年5月23日)

format-patch :添加' --base '选项来logging基础树信息

维护人员或第三方testing人员可能想知道该修补程序系列适用的确切的基本树。 教git格式 – 修补' --base '选项来logging基础树信息,并将其追加到第一条消息(封面信或系列中的第一个补丁)末尾。

基础树信息由“基本提交”组成,这是一个众所周知的提交,它是其他人工作的项目历史的稳定部分的一部分,零个或多个“先决条件”,这是众所周知的在补丁可以应用之前,还没有在“基本提交”之上按照拓扑顺序应用“基本提交”的一部分的补丁。

“基本提交”显示为“ base-commit: ”,后面跟着提交对象名称的40进制。
“先决条件修补程序”显示为“ prerequisite-patch-id: ”,后跟40位hex“修补程序ID”,可以通过将修补程序通过“ git patch-id --stable ”命令获取。

从特定提交(而不是最后一个提交)生成path:

 git format-patch -M -C COMMIT_VALUE~1..COMMIT_VALUE 

生成仅用于特定SHA1的补丁的方法是什么?

这很简单:

选项1. git show commitID > myFile.patch

选项2. git commitID~1..commitID > myFile.patch

注意:用实际提交ID(SHA1提交代码)replacecommitID