oh-my-pi conflict:// 实战:一行 @theirs 搞定所有 Git 合并冲突
oh-my-pi conflict:// 实战一行 theirs 搞定所有 Git 合并冲突【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pioh-my-piomp是一个内置 IDE 能力的 AI 编程代理。它最实用的功能之一就是用conflict://协议把每个 Git 合并冲突变成一个 URL——读一次文件拿到冲突编号写一行theirs就能干净地解决冲突批量模式conflict://*甚至能一次清空整份文件里的全部冲突。本文将带你在 5 分钟内掌握这套机制。一、合并冲突为什么 AI 也头疼传统工作流里解决合并冲突是体力活git merge之后打开文件满屏的、、人工判断保留哪一边ours 还是 theirs手动删标记、剪贴板复制粘贴文件里 20 个冲突块重复 20 遍把这件事交给 AI 代理时还有一个隐藏坑模型经常重复粘贴冲突块前后的上下文行或者行号偏移后改错位置。oh-my-pi 的做法是——把冲突从文本游戏变成URL 寻址。二、conflict:// 是如何工作的核心逻辑在 conflict-detect.ts 中整个流程分四步步骤动作说明1read文件照常读取文件顺手扫描冲突标记零额外 I/O2注册冲突编号每个完整的//块获得一个会话内稳定的编号如#1、#23read 输出末尾附加摘要显示⚠ N unresolved conflicts detected列出每个冲突的行范围和双方内容预览4write到conflict://N用选定的内容替换整个标记块含两侧内容文件即刻恢复干净几个值得注意的设计编号稳定解决冲突 #1 之后#2 的编号不变可以连续写入多笔而不必重新读取按内容定位替换时以标记块内容为锚点查找位置即使你中途手工改过文件前部导致行号漂移也能命中回声修复模型若把冲突块前后的相邻行重复粘贴进新内容系统会自动识别并去重见 conflict-detect.ts 中的trimBoundaryEcho三、实战步骤从冲突清单到一行解决1. 读取冲突清单拿到编号读文件时加:conflicts选择器read path: src/session.ts:conflicts输出形如⚠ 2 unresolved conflicts in src/session.ts - ours HEAD - theirs feature/x #1 L12-18 #2 L87-93 (3-way)这一步会注册编号后续所有conflict://操作都依赖它。2. 查看冲突某一方的内容不想看整个带标记的块给编号加作用域conflict://1 # 完整标记块 conflict://1/theirs # 只看 theirs 一侧 conflict://1/ours # 只看 ours 一侧 conflict://1/base # 只看 diff3 三方合并的 base 侧3. 一行 theirs 解决单个冲突write的content支持四个侧边令牌整行恰好是它时才生效写进真实代码里的theirs不会被误展开令牌展开为适用场景ours记录在案的 ours 侧保留自己的改动theirs记录在案的 theirs 侧采用对方分支的改动basediff3 的 base 侧回退到合并基线仅三方合并可用bothours theirs 拼接两侧是互相补充的新增绝不适用于对同一行的竞争性修改write path: conflict://1 content: theirs一行冲突 #1 消失。也可以混写普通文本content: // keep both\nours\ntheirs这行注释会原样写入随后依次展开 ours、theirs 内容。4. 批量解决conflict://* 一次清空文件里 10 个冲突通配符模式两种玩法统一策略——所有冲突都用同一侧write path: conflict://* content: theirs按编号分别指定——每行编号: 侧边令牌content: 1: ours 2: theirs 3: theirs一次调用逐个解决未列出的编号保持注册状态可稍后重试。批量处理按文件内自底向上应用同一文件内是原子的跨文件部分失败会返回错误标志失败的编号仍保留注册方便重试。四、conflict:// 速查表操作用法获取冲突清单并注册编号read file:conflicts查看完整标记块read conflict://N查看单侧内容read conflict://N/theirs或/ours、/base解决单个冲突write conflict://Ntheirs等令牌批量统一解决write conflict://* 侧边令牌批量按编号分别解决write conflict://*1: ours形式指令五、常见坑与自救编号过期文件被外部改动后旧编号会失效报错提示重新读取。解决办法重新read file:conflicts刷新注册。base报错base仅对 diff3 三方合并有|||||||标记有效普通两方合并没有 base 侧。both用错地方它只做ours 接 theirs的拼接适合两边各自新增不同内容的冲突对同一行的竞争性修改必须二选一或自己写出合并后的文本。误写了带文件前缀的路径如src/x.ts:conflict://1也能自动恢复识别但推荐直接写裸conflict://1。CRLF 文件放心用内部按 LF 记录、写回时自动还原\r\n换行风格不会乱。六、源码与文档入口想深入了解实现可以直接读这些文件冲突扫描 / 编号注册 / 内容拼接conflict-detect.tswrite 工具的冲突分支write.tsread 工具文档docs/tools/read.mdwrite 工具文档docs/tools/write.md集成测试含真实批量解决用例conflict-integration.test.ts主 README 第 18 节 Conflict resolution, made easy.README.md本地体验的话先克隆仓库git clone https://gitcode.com/GitHub_Trending/oh/oh-my-pi小结oh-my-pi 的conflict://把合并冲突从删标记、复制粘贴的体力活变成了读一次拿编号、写一行解冲突的 URL 寻址游戏。加上theirs这类侧边令牌和conflict://*批量通配处理一个 20 冲突的文件也不再是噩梦。下次 merge 之后直接把文件丢给代理看它一行theirs清场吧。【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考