我已成功地导入了补丁,没有出现冲突的更改。但是当我尝试导入具有冲突更改的补丁时,它会抛出一个错误,显示“Hunk#1 FAILED at 11..”。没有合并更改的选项。是否有其他方法来完成这个任务?
我已成功地导入了补丁,没有出现冲突的更改。但是当我尝试导入具有冲突更改的补丁时,它会抛出一个错误,显示“Hunk#1 FAILED at 11..”。没有合并更改的选项。是否有其他方法来完成这个任务?
失败的块需要手动修复。在补丁中应该有一个 *.rej 文件,其中包含被拒绝的块。您需要手动应用它。
TortoiseHg 2.1 版本以上提供了帮助你解决补丁拒绝块的工具。当你应用一个补丁并且它有拒绝块时,对于每个有拒绝块的文件,它会询问你是否想要解决被拒绝的块。如果你点击是,它就会展示一个屏幕,其中包含文件的内容(已应用成功的块)以及每个被拒绝的块,从而让你更轻松地手动进行更改,并标记每个块为已解决。
有时候我处理大型拒绝块的方式是重新定位补丁。在 TortoiseHg 1.x 中,我可以选择一个节点,在另一个节点上右键单击并重新调整补丁。但在 TortoiseHg 2.x 中,他们还没有将此功能添加回来,但解决方法也不错。您仍然可以使用 hg rebase
在命令行上重新定位补丁。无论哪种情况,您需要启用 mq
和 rebase
扩展(您可能已经启用了前者)。本答案不适用于教授如何使用 mq
或 rebase
(有很多其他的答案和文章可以做到这一点),所以我将假定您对它们有一定的熟悉度。
在两种情况下,您都需要将补丁应用于其基础修订版本(或应用干净或接近干净的修订版本)。
命令行:
运行 hg rebase -s
patchRev
-d tip
。与您在 rebase
命令上想要的任何其他开关一起使用。
这将启动您的三方合并工具,以解决每个文件的冲突。
运行 hg qrefresh
确保合并结果被更新到补丁中。
TortoiseHg UI
我更喜欢后一种方法,因为它默认情况下可以防止Mercurial自动解决冲突。它允许我选择解决文件的顺序以及如何解决它们,并显示每个步骤的进度状态。