当前位置: 首页 > news >正文

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),仅供参考

http://www.cnnetsun.cn/news/4305423.html

相关文章:

  • 10T参数预训练大模型解析:从Scaling Law到工程实践
  • 5分钟跑通drawio-desktop:本地流程图绘制工具新手上手指南
  • Java Lambda表达式:从匿名内部类到函数式编程的实践指南
  • 从零搭建参数服务器架构:分布式深度学习实战与避坑指南
  • Plane 快速上手指南:4 天从零部署开源项目管理工具,跑通你的第一个项目
  • 强化学习(RL)为何是 LLM 绕不开的关键:从 RLHF 到 PPO 与 DPO
  • 实操指南:120 个精选资源,如何快速配好你的 Claude Code
  • k-skill Olive Young 搜索指南:门店、商品、库存三合一查询
  • 语言模型评测不能只看演示
  • STM32L452 USB切换GPIO失效?引脚被USB外设覆盖的根因与解决方案
  • Mole能力边界清单:macOS之外,哪些清理与监控能力能直接用
  • no-mistakes如何把SKILL.md装进Claude Code:agent技能安装原理
  • STEVAL-CTM015V1上SRM电机位置传感器配置实战指南
  • codebase-memory-mcp Rust LSP内幕:3步解析trait方法分发、UFCS与derive宏合成
  • 微服务架构实战:在线协同编辑系统核心设计与OT算法实现
  • gogcli Keep完全指南:域范围委托下管理Keep笔记的正确姿势
  • Harness Agent定义文件教程:必须写全的6大区块
  • Remotion模板实操:用React代码5分钟做一支视频
  • Ghostty 终端模拟器:为什么它值得替代你现在的终端,附配置与调优指南
  • 甩掉遥控器:机器人全自主能力的系统工程解码
  • 深度模型部署前的配置核对
  • 美丽联合校招笔试题全解析:电商技术岗与产品运营岗备战指南
  • trackerslist Tracker 列表实用指南:用 78 个公共 Tracker 服务器提升 BT 下载速度
  • Linux Foundation 推出 Tokenomics Foundation,代币经济学走向可工程化
  • OBS Studio直播与录制完整实操指南:从零安装到第一次成功输出
  • 航海生存游戏入门:船只升级、团队分工与资源循环全解析
  • Codex CLI环境配置实战:从Unable to Locate报错到跑通AI编码Agent
  • 心理健康抑郁症数据集
  • AI辅助CAN总线逆向工程:从发动机移植到DBC生成的实战指南
  • LLM落地实战:从显存优化到框架选型与API集成的完整指南