从git存储库创建补丁或diff文件,并将其应用到另一个不同的git存储库

时间:2015-01-28 12:45:42

标签: git diff patch git-diff git-apply

我在基于WordPress的项目上工作,我想在每个新版本的WP上修补我的项目。为此,我想在两个提交或标记之间生成一个补丁。

例如,在我的回购/www/WP中,我这样做:

$git patch-format com1..com2 --stdout > ~/patchs/mypatch.patch

或者

$git patch-format tag1..tag2 --stdout > ~/patchs/mypatch.patch

/www/WP git natif WordPress

/www/myproject我的git项目基于WordPress

git apply命令行不起作用,我想是因为我们在不同的存储库中。

我可以生成没有提交的补丁文件,只是差异并将其应用到另一个git存储库吗?

先谢谢了。

5 个答案:

答案 0 :(得分:154)

您可以使用git diff生成适合git apply的{​​{3}}:

git diff tag1..tag2 > mypatch.patch

然后,您可以使用以下内容应用生成的修补程序:

git apply mypatch.patch

答案 1 :(得分:34)

要为多次提交生成补丁,您应该使用format-patch git命令,例如

git format-patch -k --stdout R1..R2

这会将您的提交导出为邮箱格式的补丁文件。

要为上次提交生成补丁,请运行:

git format-patch -k --stdout HEAD^

然后在另一个存储库中通过am git命令应用补丁,例如

git am -3 -k file.patch

请参阅:man git-format-patchgit-am

答案 2 :(得分:1)

您可以应用两个命令

  1. git diff --patch > mypatch.patch // to generate the patch
  2. git apply mypatch.patch // to apply the patch

答案 3 :(得分:1)

您甚至可以只为您当前所在的子目录打补丁。只需添加.

git format-patch -k b365cce8..80a2c18a .

然后你可以应用它们:

git am *.patch

详情见this answer

答案 4 :(得分:0)

作为补充,仅针对一个特定的提交生成补丁,请使用:

git format-patch -1 <sha>

生成补丁文件时,请确保您的其他存储库在使用git am ${patch-name}时知道它在哪里

在添加补丁之前,使用git apply --check ${patch-name}确保没有冲突。