为特定的提交生成一个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
。