冲突与 diff 归属
用途:多个 Agent 并行改代码时,避免结果互相覆盖、责任无法追溯
两类冲突
「两类冲突」小节链接| 类型 | 表现 | 检测 |
|---|---|---|
| 文本冲突 | 同一文件同一区域被两方修改,合并冲突 | Git 合并报错 |
| 语义冲突 | 文本可自动合并,但组合后行为错误(一方改了函数签名,另一方加了新调用点) | 只有跑测试/集成验证才能发现 |
语义冲突是并行 Agent 的主要风险,它不会被 Git 拦住,却会让“每片都通过测试”的整体失败。
归属(attribution)要求
「归属(attribution)要求」小节链接每条变更必须能回答:这是哪个 Agent、在哪个任务、基于什么输入、对哪个提交做的?
落地做法:
- 一任务一分支(或一 worktree):工作区物理隔离,避免共享未提交状态。
- 一变更一提交:每个子任务产出独立提交,提交信息含任务 ID 与证据引用。
- 不跨任务混合提交:混合提交会让回滚与归因失效。
- 合并顺序显式记录:谁先合入、后合入者负责 rebase 与再验证。
- 合并后重新跑门禁:单片绿灯不代表合并后绿灯(语义冲突的唯一防线)。
降低冲突的设计
「降低冲突的设计」小节链接| 手段 | 说明 |
|---|---|
| 按文件/模块分区 | 任务切分时约定各 Agent 的可写范围,越界即失败 |
| 契约先行 | 接口、类型、命名先定,减少“各自发明” |
| 扩展点而非修改点 | 新功能以新增文件/注册方式实现,减少同文件竞争 |
| 小批量频繁集成 | 冲突面随时间累积,早合入代价低 |
| 格式化独立 | 代码风格变更单独提交,避免与逻辑变更混在一起 |
| 锁与所有权 | 对无法分区的共享文件(lockfile、路由表)设单一写入者 |
并行探索 vs 并行实现
「并行探索 vs 并行实现」小节链接- 并行探索(多方案比选):各 Agent 只产出设计与评估,不落代码,冲突面小,收益明确。
- 并行实现:冲突与集成成本高,只适合边界清晰、可独立验证的分区任务。
经验:优先并行探索,谨慎并行实现。
归属失败的症状
「归属失败的症状」小节链接| 症状 | 根因 |
|---|---|
| 出问题后无人能说明“这行谁写的、为什么” | 混合提交、无任务 ID |
| 回滚一个功能带走了别的改动 | 提交未按任务切分 |
| 合并后测试大面积失败 | 缺少合并后再验证的门禁要求 |
| 两个 Agent 重复实现同一能力 | 契约与任务清单未共享/未去重 |
常见误区
「常见误区」小节链接| 误区 | 修正 |
|---|---|
| 让多个 Agent 在同一工作区并发写 | 物理隔离分支/worktree |
| 认为 Git 能拦住所有冲突 | 语义冲突需测试与集成验证 |
| 合并后不重跑门禁 | 必须在合并提交上重新验证 |
| 大提交省事 | 归因与回滚能力丧失 |
| 用“最后写入”解决冲突 | 静默丢改动,必须显式裁决 |
延伸阅读
「延伸阅读」小节链接- 本站:任务分解粒度、失败恢复与幂等、编排拓扑
- Git worktree 与分支模型的公开资料