【问题标题】:How to apply a patch generated with git format-patch?如何应用使用 git format-patch 生成的补丁?
【发布时间】:2011-01-16 00:44:13
【问题描述】:

我有两个本地 git 存储库,都指向 same 远程存储库。

在一个 git 存储库中,如果我执行git format-patch 1,我如何将该补丁应用到另一个存储库?

【问题讨论】:

    标签: git patch


    【解决方案1】:

    注意:你可以先预览一下你的补丁会做什么:

    首先是统计数据:

    git apply --stat a_file.patch
    

    然后进行试运行以检测错误:

    git apply --check a_file.patch
    

    最后,您可以使用 git am 将补丁应用为提交。这也允许您sign off 应用的补丁。
    这对以后的参考很有用。

    git am --signoff < a_file.patch 
    

    查看example in this article

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

    【讨论】:

    • 自我说明:第 200 个最佳答案金徽章。
    • git am &lt; somepatch.patch 产生“致命:不允许空标识名称(对于 )”。谁能给我解释一下为什么?
    • @gromit190 表示补丁中有错误的 Author 标头,和/或您没有 git config user.{name,email}
    • 好的; git apply --check 表示 patch does not applygit apply -3 表示 repository lacks the necessary blob to fall back on 3-way merge. 在 git 中,rebase 提交是如此轻而易举;但是人们如何在更新的代码之上重新定位他们的补丁
    • @ulidtko 也许是stackoverflow.com/a/15375869/6309 ?
    【解决方案2】:
    git apply name-of-file.patch
    

    【讨论】:

    • 这可能没有回答最初的详细问题,但它回答了标题中的问题,这就是我出现在这个页面上的原因。谢谢!
    • 我知道这是一个古老的问题和答案......但我认为这可能有助于某些人理解difference between git apply and git am
    • git apply "[...文件的完整路径...]/name-of-file.patch"
    【解决方案3】:

    或者,如果你是老派:

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

    【讨论】:

    • 请注意:这不会创建提交,因此会丢失提交消息和作者信息。
    • 我遇到过一些情况,git apply 不起作用,不知道为什么
    • 如果您尝试将补丁应用到 Git 忽略的路径或文件并且您有 Git 格式的补丁,这将非常有用。
    【解决方案4】:

    首先你应该记下git amgit apply之间的difference

    当您使用git am 时,您通常想要应用许多补丁。因此应该使用:

    git am *.patch
    

    或者只是:

    git am
    

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

    UPD
    Here你可以找到如何生成这样的补丁

    【讨论】:

    • 这种对差异的解释帮助我使用git apply .. 和--reverse :-) ?
    【解决方案5】:

    如果您想将其应用为作为提交,请使用git am

    【讨论】:

    • 您通常如何首先获取 mbox 文件?
    • 或者直接使用git apply
    • @Sebi2020 : git apply 将更改应用为补丁,而不是提交,而git am 假定电子邮件的文本是提交消息(有一些例外)并应用更改创建提交(它可以尝试通过与git am --3way 进行三向合并来解决冲突。
    • 我无法让git am 工作。它在中间停止应用更改并且生成的提交不完整
    • @KansaiRobot :应用更改时可能存在内容冲突,但您的评论中没有足够的信息;请将问题作为问题发布,尽可能详细。
    【解决方案6】:

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

    【讨论】:

    • 谢谢。这对每个人都非常有用。有一个公认的答案。但这也很有用。
    • @ambarox 但是这个答案被否决了一次,我不知道为什么
    • 可能有人认为应用补丁的唯一方法是通过命令行。 :D 我给了你一个赞成票。干杯伙伴。
    • @LasithaBenaragama - 有点像。 SO 不仅是为了帮助 OP,而且是为了帮助所有跟随的人。这个答案(虽然有用)没有提供一般的解决方案。这将是一篇很棒的小博客文章,但不是一个“很好”的答案。会解释否决票!
    猜你喜欢
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 2022-01-13
    • 2020-08-13
    • 2015-05-21
    • 2011-10-03
    相关资源
    最近更新 更多