我已成功导入补丁而没有相互冲突的更改。但是当我尝试导入具有冲突变化的补丁时,它会抛出一个错误,说“Hunk#1 FAILED at 11 ..”。合并更改没有选项。有没有其他方法可以实现这个目标?
答案 0 :(得分:5)
必须手动修复失败的帅哥。应该有一个* .rej文件,其中包含来自补丁的被拒绝的hunk。您必须手动应用它。
答案 1 :(得分:4)
最新版本的TortoiseHg 2.1提供了一些工具,可帮助您解决补丁中被拒绝的块。当您应用补丁并且它有拒绝时,对于每个拒绝的文件,它会询问您是否要解析被拒绝的块。如果单击“是”,它将显示一个屏幕,其中包含文件的内容(已应用成功的块)以及每个被拒绝的块,以允许您手动执行更改,并将每个更改标记为已解决。
我有时处理大量拒绝的方式是修改补丁。在TortoiseHg 1.x中,我可以选择一个节点,右键单击另一个节点并实际修改补丁。在TortoiseHg 2.x中,他们还没有重新加入,但解决方法并不是那么糟糕。您仍然可以使用hg rebase
在命令行上修改补丁。在任何一种情况下,您都需要启用mq
和rebase
扩展(并且您可能已经启用了前者)。这个答案不是教授如何使用mq
或rebase
的地方(还有很多其他答案和文章可以做到这一点),所以我会对它们有所了解。
在这两者中,您需要将修补程序应用于它所基于的修订版(或者应用于干净地应用或接近干净的修订版)。
<强>命令行:强>
运行hg rebase -s
patchRev
-d tip
。 以及rebase
命令所需的任何其他开关。
这将打开您的3向合并工具,以解决每个文件的冲突。
运行hg qrefresh
以确保合并结果已更新到修补程序中。
TortoiseHg用户界面
我更喜欢后一种方法用于更麻烦的实例,因为默认情况下它会阻止Mercurial自动解决冲突。它允许我选择解析文件的顺序以及解决方法,并显示每个步骤的进度状态。