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

时间:2012-02-20 18:36:24

标签: git

我有一个git存储库,还有一个非常旧的补丁(2007年制作),我想应用它。从那时起,存储库的内容发生了重大变化,当我尝试应用补丁时,由于冲突而失败。

我想通过将补丁添加为新分支并将其合并回master来处理git中的冲突。但要做到这一点,我需要找到补丁可以干净地应用的最早提交。在git中有一种简单的方法吗?

2 个答案:

答案 0 :(得分:12)

您应该可以使用git bisect执行此操作:正常启动二分,然后使用:

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

这将使用该命令 - “可以应用此修补程序” - 自动确定修订是好还是坏。你不久之后应该找到合适的位置。

这将为您提供适用补丁的最新提交。

如果您想要最早的,请在存储库的开头和它成功应用的位置之间运行第二个二等分,其中“不适用”作为测试。

答案 1 :(得分:1)

如果补丁记录了它应该应用的blob的身份,那么如果补丁不能干净地应用,你可以使用git apply --3way来回退三向合并。 从男人git申请:   -3, - 3way      当补丁不能干净地应用时,如果补丁记录了它应该应用的blob的身份,则回退到三向合并,并且我们在本地可以使用这些blob,可能会将冲突标记留在工作树中的文件中供用户解决。此选项隐含--index选项,与--reject和--cached选项不兼容。