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

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

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

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


# or


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

/www/WP git natif WordPress

我的git项目基于WordPress

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

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

谢谢你!

255334 次浏览

你可以只使用git diff来生成适合git apply统一的diff:

git diff tag1..tag2 > mypatch.patch

然后,您可以应用产生的补丁:

git apply mypatch.patch

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

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

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

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

git format-patch -k --stdout HEAD~1

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

git am -3 -k file.patch

参见:man git-format-patchgit-am

作为补充,为了只为一个特定的提交生成补丁,使用:

git format-patch -1 <sha>

当生成补丁文件时,确保您的其他repo在使用git am ${patch-name}时知道它的位置

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

您可以应用两条命令

  1. git diff --patch > mypatch.patch //生成补丁
  2. git apply mypatch.patch //应用补丁`

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

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

然后你可以应用它们:

git am *.patch

详见这个答案