为特定提交生成git补丁

时间:2011-07-12 00:35:56

标签: git patch

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

我尝试使用git format-patch <the SHA1>,但是从那个SHA1开始为每次提交生成一个补丁。在生成几百个补丁之后,我不得不杀死这个过程。

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

10 个答案:

答案 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 3de6651commit fa2ab86commit ded2c09Xiaolong 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提交代码)。