如何应用git format-patch生成的补丁?


221

我有2个git本地存储库,都指向同一个远程存储库。

在一个git存储库中,如果这样做git format-patch 1,如何将补丁应用到另一个存储库?

Answers:


330

注意:您可以先预览补丁程序的功能:

首先统计:

git apply --stat a_file.patch

然后试运行以检测错误:

git apply --check a_file.patch

最后,您可以使用git am将补丁程序作为提交来应用:它允许您注销已应用的补丁程序。
这对于以后的参考很有用。

git am --signoff < a_file.patch 

请参阅本文中示例

在您的git日志中,您会发现提交消息包含“ Signed-by-by”标签。Github和其他人将读取此标签,以提供有关如何在代码中完成提交的有用信息。

例


9
自我说明:第200枚Great Answer金牌。
VonC

4
git am < somepatch.patch产生“致命的:不允许使用空标识符名称(用于<>)”。有人可以向我解释原因吗?
gromit190 '19

@ gromit190意味着Author补丁中的标头错误,和/或您没有git config user.{name,email}
ulidtko

好; ,然后在git中git apply --checkpatch does not applygit apply -3repository lacks the necessary blob to fall back on 3-way merge.提交进行重新设置是一件轻而易举的事情;但是人们如何在更新的代码之上重新建立其补丁程序
ulidtko

1
@ulidtko也许与stackoverflow.com/a/15375869/6309吗?
VonC

162
git apply name-of-file.patch

25
这可能还没有回答原始的详细问题,但是它回答了标题中的问题,这就是为什么我在此页面上。谢谢!
摇滚李

12
我知道这是一个古老的问题和答案...但是我认为这对于理解git apply和git am之间区别可能会有所帮助。
mgarey

1
git apply“ [...文件的完整路径...] / name-of-file.patch”
Anton Lyhin

41

或者,如果您在老学校踢球:

cd /path/to/other/repository
patch -p1 < 0001-whatever.patch

3
请注意,这不会创建提交,因此将丢失提交消息和作者信息。
凯撒

22

首先,你应该采取记约之间git amgit apply

使用时,git am您通常希望应用许多补丁。因此应使用:

git am *.patch

要不就:

git am

Git会自动找到补丁并按顺序应用它们;-)

UPD
在这里您可以找到如何生成此类补丁


1
区别的这个解释让我用git apply..并在--reverse:-)👍
乔丹啧啧


14

如果您使用的是JetBrains IDE(例如IntelliJ IDEA,Android Studio,PyCharm),则可以将补丁文件拖放到IDE中,然后会出现一个对话框,显示补丁的内容。您现在所要做的就是单击“应用补丁”,然后将创建一个提交。


1
谢谢你 这对每个人都非常有用。有一个可接受的答案。但这也很有用。
Lasitha Benaragama

1
@ambarox但是这个答案被否决了一次,我不知道为什么
ice1000

1
可能有人认为应用补丁的唯一方法是通过命令行。:D我给你点赞。队友的欢呼声。
Lasitha Benaragama

1
@LasithaBenaragama-一种。SO不仅要为OP提供帮助,而且还应为每个跟随者提供帮助。这个答案(虽然有用)没有提供一般的解决方案。这将是一个很棒的小博客文章,但不是“很好”的答案。会解释一下投票!
OldTinfoil

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.