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

zat*_*ine 125 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存储库吗?

谢谢你.

Enr*_*lio 199

您可以使用git diff以生成适用于以下内容的统一差异git apply:

git diff tag1..tag2 > mypatch.patch
Run Code Online (Sandbox Code Playgroud)

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

git apply mypatch.patch
Run Code Online (Sandbox Code Playgroud)

  • 我使用了`git diff -p tag1 tag2 > my.patch`,效果很好。 (4认同)
  • 小心 `git diff ...` + `git apply ...` 不能正确处理已删除/移动的文件...当 `git format-patch ...` + `git am ...` 处理时。 (2认同)

ken*_*orb 40

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

git format-patch -k --stdout R1..R2
Run Code Online (Sandbox Code Playgroud)

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

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

git format-patch -k --stdout HEAD^
Run Code Online (Sandbox Code Playgroud)

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

git am -3 -k file.patch
Run Code Online (Sandbox Code Playgroud)

见:man git-format-patchgit-am.

  • @AaronFranke,您可以尝试使用-p选项:git format-patch -p HEAD ^ 1 (2认同)

小智 17

您可以应用两个命令

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