如何在Git中应用一个非常古老的补丁?

7
我有一个git仓库,想要将一份早在2007年制作的非常古老的补丁应用到它上面。由于仓库的内容已经发生了很大变化,当我尝试应用补丁时,由于冲突而失败。
我想在git中处理冲突,通过将补丁作为新分支添加并合并回主分支。但是为了做到这一点,我需要定位补丁可以干净地应用到的最早提交。是否有一种简单的方法在git中实现这一点?
2个回答

13

你可以使用 git bisect 来完成这个任务:像正常进行二分查找一样开始查找,然后使用:

git bisect run git apply --check ${patch}

这将使用命令“can this patch apply”来自动确定修订版是否好或坏。不久之后,您应该会找到正确的位置。

这将为您提供最近的提交,其中补丁将适用。

如果您想要最早的提交,请使用“不适用”作为测试运行第二个二分查找,从存储库的开头到成功应用它的地方。


"git bisect" 需要一个好的修订版本,如果我知道,我就不会有这个问题了。 :( - Matt McHenry

1
如果补丁记录了它应该应用的blob的身份,则可以使用git apply --3way来回退到三方合并,如果补丁无法干净地应用。从man git apply中得知:

-3, --3way
当补丁无法干净地应用时,如果补丁记录了它应该应用的blob的身份,并且我们在本地有这些blob可用,则回退到三方合并,可能会在工作树中的文件中留下冲突标记供用户解决。此选项意味着--index选项,并且与--reject和--cached选项不兼容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接