230

我从事基于 WordPress 的项目,我想在每个新发布的 WP 版本中修补我的项目。为此,我想在两个提交或标签之间生成一个补丁。

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

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

# or

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

/www/WPgit natif WordPress

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

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

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

谢谢你。

4

5 回答 5

343

您可以只使用git diff生成适合的统一差异git apply

git diff tag1..tag2 > mypatch.patch

然后,您可以使用以下方法应用生成的补丁:

git apply mypatch.patch
于 2015-01-28T13:06:39.510 回答
62

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

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

于 2016-07-29T16:30:39.640 回答
23

您可以应用两个命令

  1. git diff --patch > mypatch.patch// 生成补丁`
  2. git apply mypatch.patch// 应用补丁`
于 2020-12-10T00:27:04.103 回答
2

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

git format-patch -1 <sha>

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

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

于 2020-07-13T07:08:16.877 回答
1

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

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

然后你可以应用它们:

git am *.patch

有关详细信息,请参阅此答案

于 2021-04-03T12:26:09.313 回答