news 2026/8/30 10:25:34

oh-my-pi conflict:// 实战:一行 @theirs 搞定所有 Git 合并冲突

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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-pi

oh-my-pi(omp)是一个内置 IDE 能力的 AI 编程代理。它最实用的功能之一,就是用conflict://协议把每个 Git 合并冲突变成一个 URL——读一次文件拿到冲突编号,写一行@theirs就能干净地解决冲突,批量模式conflict://*甚至能一次清空整份文件里的全部冲突。本文将带你在 5 分钟内掌握这套机制。

一、合并冲突,为什么 AI 也头疼?

传统工作流里,解决合并冲突是体力活:

  1. git merge之后打开文件,满屏的<<<<<<<=======>>>>>>>
  2. 人工判断保留哪一边(ours 还是 theirs)
  3. 手动删标记、剪贴板复制粘贴
  4. 文件里 20 个冲突块?重复 20 遍

把这件事交给 AI 代理时,还有一个隐藏坑:模型经常重复粘贴冲突块前后的上下文行,或者行号偏移后改错位置。oh-my-pi 的做法是——把冲突从"文本游戏"变成"URL 寻址"。

二、conflict:// 是如何工作的?

核心逻辑在 conflict-detect.ts 中,整个流程分四步:

步骤动作说明
1read文件照常读取文件,顺手扫描冲突标记(零额外 I/O)
2注册冲突编号每个完整的<<<<<<</=======/>>>>>>>块获得一个会话内稳定的编号,如#1#2
3read 输出末尾附加摘要显示⚠ N unresolved conflicts detected,列出每个冲突的行范围和双方内容预览
4writeconflict://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 解决单个冲突

writecontent支持四个"侧边令牌",整行恰好是它时才生效(写进真实代码里的@theirs不会被误展开):

令牌展开为适用场景
@ours记录在案的 ours 侧保留自己的改动
@theirs记录在案的 theirs 侧采用对方分支的改动
@basediff3 的 base 侧回退到合并基线(仅三方合并可用)
@bothours + theirs 拼接两侧是互相补充的新增(绝不适用于对同一行的竞争性修改)
write path: "conflict://1" content: "@theirs"

一行,冲突 #1 消失。也可以混写普通文本:

content: "// keep both\n@ours\n@theirs"

这行注释会原样写入,随后依次展开 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://N+@theirs等令牌
批量统一解决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.ts
  • write 工具的冲突分支:write.ts
  • read 工具文档:docs/tools/read.md
  • write 工具文档: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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/30 10:25:26

10T参数预训练大模型解析:从Scaling Law到工程实践

最近 AI 圈子里最让人兴奋的一条消息&#xff0c;莫过于“OpenAI 已经预训练了一个名为 Bel 的超大规模模型&#xff0c;参数量超过 10T&#xff0c;直指通用人工智能&#xff08;AGI&#xff09;”。虽然目前还没有官方发布的完整技术报告&#xff0c;但关于超大模型、预训练范…

作者头像 李华
网站建设 2026/8/30 10:25:09

5分钟跑通drawio-desktop:本地流程图绘制工具新手上手指南

5分钟跑通drawio-desktop&#xff1a;本地流程图绘制工具新手上手指南 【免费下载链接】drawio-desktop Official electron build of draw.io 项目地址: https://gitcode.com/GitHub_Trending/dr/drawio-desktop 上周你要把公司系统的架构图画出来&#xff0c;但一打开在…

作者头像 李华
网站建设 2026/8/30 10:24:54

Java Lambda表达式:从匿名内部类到函数式编程的实践指南

Java 8 的 Lambda 表达式&#xff0c;很多开发者第一眼看到时只觉得“语法挺怪”&#xff0c;接着会想“这跟匿名内部类不是一回事吗&#xff1f;”真正动手后&#xff0c;又会接连遇到“捕获的变量为什么不能改”“Lambda 里 this 怎么指向外面了”“IDE 为什么让我加 final”…

作者头像 李华
网站建设 2026/8/30 10:23:41

从零搭建参数服务器架构:分布式深度学习实战与避坑指南

简介&#xff1a;本资源是一套基于参数服务器架构的分布式深度学习完整实现方案&#xff0c;面向深度学习课程设计、毕业设计及期末大作业实践者&#xff0c;解决大规模数据与复杂模型下的训练效率与协同优化问题。压缩包共144个文件&#xff0c;含16个Python核心模块&#xff…

作者头像 李华
网站建设 2026/8/30 10:22:55

强化学习(RL)为何是 LLM 绕不开的关键:从 RLHF 到 PPO 与 DPO

为什么说 RL 是 LLM 无法绕过的一道坎很多同学接触大语言模型&#xff08;LLM&#xff09;已经有一段时间了&#xff0c;会写 Prompt、会做 RAG、会用 LangChain 搭 Agent&#xff0c;甚至自己微调过模型。但一提到 RL&#xff08;强化学习&#xff09;&#xff0c;第一反应往往…

作者头像 李华