我需要编写一个脚本,为SHA1提交号列表创建补丁。
我尝试使用git format-patch <the SHA1>
,但是从那个SHA1开始为每次提交生成一个补丁。在生成几百个补丁之后,我不得不杀死这个过程。
有没有办法只为特定的SHA1生成补丁?
答案 0 :(得分:1729)
尝试:
git format-patch -1 <sha>
或
git format-patch -1 HEAD
根据上面的文档链接,-1
标志告诉git应该在补丁中包含多少次提交;
- &LT; N&GT;
从最顶层的提交准备补丁。
使用以下命令应用补丁:
git am < file.patch
答案 1 :(得分:260)
从特定sha1哈希中从最顶层提交生成补丁:
git format-patch -<n> <SHA1>
单个补丁文件中的最后10个补丁:
git format-patch -10 HEAD --stdout > 0001-last-10-commits.patch
答案 2 :(得分:77)
假设您在提交1之后提交了id 2,那么您将能够运行:
git diff 2 1 > mypatch.diff
其中2和1是SHA哈希值。
答案 3 :(得分:55)
此命令(已由@Naftuli Tzvi Kay建议):
git format-patch -1 HEAD
用特定的哈希值或范围替换HEAD
。
将生成最新提交的补丁文件,格式化为类似UNIX邮箱格式。
-<n>
- 从最顶层的提交中准备补丁。
然后您可以通过以下方式以邮箱格式重新应用补丁文件:
git am -3k 001*.patch
请参阅:man git-format-patch
。
答案 4 :(得分:25)
git format-patch commit_Id~1..commit_Id
git apply patch-file-name
快速简单的解决方案。
答案 5 :(得分:8)
如果您想确保(单一提交)补丁将应用于特定提交之上,您可以使用新的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
commit bb52995,见commit 3de6651,commit fa2ab86,commit ded2c09,Xiaolong Ye (``)(2016年4月26日)。
(Junio C Hamano -- gitster
--于2016年5月23日commit 72ce3ff合并)
format-patch
:添加&{39;--base
&#39;记录基础树信息的选项维护者或第三方测试人员可能想知道确切的基础树 补丁系列适用于。教git格式 - 修补&#39;
--base
&#39;选项 记录基础树信息并将其附加到第一个结尾 消息(系列中的求职信或第一个补丁)。基础树信息由&#34; base commit&#34;组成,这是众所周知的 提交是每个人项目历史稳定部分的一部分 否则可以使用零个或多个&#34;先决条件补丁&#34; 飞行中众所周知的补丁尚未成为&#34;基础提交的一部分&#34; 需要在&#34; base commit&#34;之上应用按拓扑顺序排列 在可以应用补丁之前。
&#34; base commit&#34;显示为&#34;
base-commit:
&#34;其次是40-hex 提交对象名称 A&#34;必备补丁&#34;显示为&#34;prerequisite-patch-id:
&#34;然后是40-hex&#34; patch id&#34;,可以通过将补丁传递给&#34;git patch-id --stable
&#34;命令。
答案 6 :(得分:6)
从特定提交(而不是最后一次提交)生成路径:
git format-patch -M -C COMMIT_VALUE~1..COMMIT_VALUE
答案 7 :(得分:4)
如果你只想要指定文件的差异,你可以:
git diff master 766eceb - connections /&gt; 000-MySQL的-connector.patch
答案 8 :(得分:2)
我的工作背景是要使用:
git log --patch -1 $ID > $file
但是我正在考虑现在使用git format-patch -1 $ID
。
答案 9 :(得分:-4)
仅为特定SHA1生成补丁的方法是什么?
这很简单:
选项1. git show commitID > myFile.patch
选项2. git commitID~1..commitID > myFile.patch
注意:将commitID
替换为实际提交ID(SHA1提交代码)。