【问题标题】:Applying a git patch from a previous commit to a later commit将先前提交的 git 补丁应用到以后的提交
【发布时间】:2013-08-20 09:30:34
【问题描述】:

假设 git 树显示为:

1 ----> 2 ----> 3 -----> 4(HEAD/MASTER)
      \
       \ (PATCH)
        --2A->

我有一个 diff 为 2 和 2A 的补丁,它增加了一项功能。

有没有一种聪明的方法可以将此补丁应用于最新的提交? 假设我只有补丁文件和主线的git repo。

【问题讨论】:

  • 你试过git am <file.patch>还是git apply <file.patch>?...

标签: git patch


【解决方案1】:

先尝试简单的方法。如果您已经在 master 上,

git apply PATCH

如果补丁不适用于 HEAD/master,试试这个:

git checkout 2
git apply PATCH
git tag patch-applied
git checkout master
git cherry-pick patch-applied

git checkout 2
git apply PATCH
git tag patch-applied
git checkout master
git merge patch-applied

对于合并和变基,您可能需要解决冲突。 rebase 给你一个线性历史,merge 给你一个分支历史。

您可以使用git lola 查看您创建的历史记录。

【讨论】:

  • 编辑了我的答案,如果你这样做,你需要cherry-pick而不是rebase。
【解决方案2】:

作为TheCodeArtist points out,如果您有补丁文件,只需使用git apply <patch>即可应用:

git checkout master
git apply <patch>

根据official Linux Kernel Git documentation for git apply

姓名

git-apply - 对文件和/或索引应用补丁

说明

读取提供的差异输出(即“补丁”)并将其应用于文件。

此命令应用补丁但不创建提交。使用git-am(1)git-format-patch(1) 生成和/或通过电子邮件收到的补丁创建提交。

【讨论】:

    猜你喜欢
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 2019-12-11
    • 1970-01-01
    • 2011-09-20
    • 2014-11-28
    • 1970-01-01
    相关资源
    最近更新 更多