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

问题描述 投票:0回答:7

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

例如,在我的仓库中

/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

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

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

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

git diff patch git-diff git-apply
7个回答
424
投票

您可以使用

git diff
来生成适合git apply
统一差异

git diff tag1..tag2 > mypatch.patch

然后您可以使用以下命令应用生成的补丁:

git apply mypatch.patch

75
投票

要为多个提交生成补丁,您应该使用

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-patch
git-am


56
投票

您可以应用两个命令

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

3
投票

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

git format-patch -1 <sha>

补丁文件生成后,请确保您的其他存储库在使用时知道它在哪里

git am ${patch-name}

添加补丁前,请使用

git apply --check ${patch-name}
确保不存在冲突。


3
投票

使用此命令。

git diff master..localbranch > file.patch

2
投票

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

.

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

然后您可以应用它们:

git am *.patch

详情请参阅此答案


0
投票

在这里,您可以按照以下说明进行操作:

  1. 检查您要修补的分支。
  2. git 格式补丁 -o 其中 要应用补丁, 是存储创建的补丁的简单文件夹名称。
  3. 检查您要应用补丁的分支。
  4. git am /*.patch
© www.soinside.com 2019 - 2024. All rights reserved.