背景
冲突流程已有(横幅 + 整文件 ours/theirs/mark resolved),但逐块选择还得去外部编辑器改冲突标记。GitKraken 的三栏 merge tool 是它处理冲突体验好的关键。
方案(做简化版,不做字符级对齐)
- 数据:读工作区冲突文件,解析
<<<<<<< / ======= / >>>>>>> 标记切成 [普通段, 冲突段] 序列;冲突段含 ours/theirs 两份文本(diff3 风格再含 base,先忽略 base)
- UI:点冲突文件进入合并视图(复用中间面板 overlay):
- 上下结构而非三栏起步:每个冲突段渲染成一个卡片,左半 ours(青)右半 theirs(紫),每半有 checkbox,可单选/全选(= 两边都要,ours 在前)
- 顶部 "Take all ours / Take all theirs",底部 "Save & Mark Resolved"
- 保存:按选择拼接全文写回文件 +
git add,从 conflicted 列表消失;一个都没选时禁用保存
- 编辑兜底:卡片支持直接编辑结果文本(TextEditor),满足手工微调
- 不做:语法高亮、字符级 diff、base 三方对齐(后续迭代)
验收
- scratchpad conflict-demo 类冲突:逐块选边 + 混选(both)能正确生成结果并 resolved
- 与现有 Continue/Abort 流程衔接:全部文件 resolved 后 Continue 亮起
背景
冲突流程已有(横幅 + 整文件 ours/theirs/mark resolved),但逐块选择还得去外部编辑器改冲突标记。GitKraken 的三栏 merge tool 是它处理冲突体验好的关键。
方案(做简化版,不做字符级对齐)
<<<<<<< / ======= / >>>>>>>标记切成 [普通段, 冲突段] 序列;冲突段含 ours/theirs 两份文本(diff3 风格再含 base,先忽略 base)git add,从 conflicted 列表消失;一个都没选时禁用保存验收