跳转到内容

冲突与 diff 归属

用途:多个 Agent 并行改代码时,避免结果互相覆盖、责任无法追溯

类型 表现 检测
文本冲突 同一文件同一区域被两方修改,合并冲突 Git 合并报错
语义冲突 文本可自动合并,但组合后行为错误(一方改了函数签名,另一方加了新调用点) 只有跑测试/集成验证才能发现

语义冲突是并行 Agent 的主要风险,它不会被 Git 拦住,却会让“每片都通过测试”的整体失败。

每条变更必须能回答:这是哪个 Agent、在哪个任务、基于什么输入、对哪个提交做的?

落地做法:

  1. 一任务一分支(或一 worktree):工作区物理隔离,避免共享未提交状态。
  2. 一变更一提交:每个子任务产出独立提交,提交信息含任务 ID 与证据引用。
  3. 不跨任务混合提交:混合提交会让回滚与归因失效。
  4. 合并顺序显式记录:谁先合入、后合入者负责 rebase 与再验证。
  5. 合并后重新跑门禁:单片绿灯不代表合并后绿灯(语义冲突的唯一防线)。
手段 说明
按文件/模块分区 任务切分时约定各 Agent 的可写范围,越界即失败
契约先行 接口、类型、命名先定,减少“各自发明”
扩展点而非修改点 新功能以新增文件/注册方式实现,减少同文件竞争
小批量频繁集成 冲突面随时间累积,早合入代价低
格式化独立 代码风格变更单独提交,避免与逻辑变更混在一起
锁与所有权 对无法分区的共享文件(lockfile、路由表)设单一写入者
  • 并行探索(多方案比选):各 Agent 只产出设计与评估,不落代码,冲突面小,收益明确。
  • 并行实现:冲突与集成成本高,只适合边界清晰、可独立验证的分区任务。

经验:优先并行探索,谨慎并行实现。

症状 根因
出问题后无人能说明“这行谁写的、为什么” 混合提交、无任务 ID
回滚一个功能带走了别的改动 提交未按任务切分
合并后测试大面积失败 缺少合并后再验证的门禁要求
两个 Agent 重复实现同一能力 契约与任务清单未共享/未去重
误区 修正
让多个 Agent 在同一工作区并发写 物理隔离分支/worktree
认为 Git 能拦住所有冲突 语义冲突需测试与集成验证
合并后不重跑门禁 必须在合并提交上重新验证
大提交省事 归因与回滚能力丧失
用“最后写入”解决冲突 静默丢改动,必须显式裁决
  • 本站:任务分解粒度、失败恢复与幂等、编排拓扑
  • Git worktree 与分支模型的公开资料