1
0
Files
nex/docs/prompts/prompt-smart-merge.md

4.8 KiB
Raw Blame History

请对当前项目中所有 dev* 分支进行智能合并到目标分支(默认 main按以下流程执行。

约束(全局,不可违反)

  • 所有操作(合并、删除)执行前必须用提问工具获得用户确认
  • 冲突文件严禁自主编辑,仅分析方案后交用户选择
  • 全程仅使用 git merge,禁止 rebaserebase 会重写目标分支历史)
  • git add 仅指定已解决冲突的文件路径,禁止 git add ./git add -A
  • git reset --hard 仅配合安全锚点 tag 使用,禁止裸用
  • 禁止自动 git stash git push

1. 环境检查

  • git status 确认工作区干净,不干净则提示用户处理
  • 确认目标分支,拉取最新:git pull
  • 列出 dev 分支:git branch --list 'dev*',无则结束
  • 创建全局安全锚点:git tag pre-merge-backup-{timestamp},报告标签名

2. 分支分析

对每个 dev 分支并行收集:

维度 内容
基础 分支名、分叉 commit、commit 数/消息、是否推远端、是否已合并(git branch --merged
变更 文件列表(git diff --name-status target...branch)、所属模块、行数统计
依赖 是否依赖/被依赖其他 dev 分支、是否修改公共文件(共享类型、工具函数、配置)
冲突 dry-run 预测(逐个串行,因需修改工作区):git merge --no-commit --no-ff branch → 收集冲突 → git merge --abort;与其他 dev 分支文件重叠

3. 合并顺序

按以下优先级排序:已合并(跳过) → 公共/基础设施变更 → 独立模块 → 有依赖的 → 高冲突/跨模块。

输出计划表(分支名、模块、文件数、依赖、预估冲突、风险),用提问工具让用户确认,用户可调整顺序或排除。

4. 逐个合并

对每个分支重复以下流程:

准备

  1. 确认工作区干净、当前在目标分支
  2. git tag merge-before-{分支名} 创建分支级安全锚点
  3. 向用户确认即将合并的分支及风险

执行

git merge {分支} --no-ff

  • 无冲突 → 进入验证
  • 有冲突 → 进入冲突处理

冲突处理(三层渐进)

git diff --name-only --diff-filter=U 列出冲突文件,然后按以下三层逐步展开:

第一层:冲突概览表

向用户展示所有冲突文件的摘要,每文件一行:

文件 冲突区域 冲突类型 目标分支改动 合并分支改动 推荐方案
  • 冲突类型:双方修改同一区域 / 一方删除一方修改 / 文件重命名冲突等
  • 改动描述:精简到关键差异(如"新增 rateLimit 字段"而非展示原文)
  • 推荐方案:根据分析给出最合理的选项

用提问工具让用户选择处理方式:

  • 批量处理:对推荐方案无异议的文件一键确认
  • 逐个审查:用户指定要详细审查的文件,进入第二层
  • 放弃合并:git merge --abort,跳过当前分支,继续下一个

第二层:单个文件详情(按需)

仅展示用户指定审查的文件:

  • 冲突区域的上下文(前后几行非冲突代码)
  • HEAD 侧与分支侧的具体差异(精简 diff非完整文件内容
  • 方案选项:双保留 / 保留目标(--ours) / 保留分支(--theirs) / 用户编辑 / 放弃合并

若用户仍觉信息不足,进入第三层。

第三层:原始冲突标记(按需)

展示用户指定文件的完整 <<<<<<</=======/>>>>>>> 原始标记内容。

确认与提交

  1. 方案全部确定后逐个执行:
    • 双保留AI 生成合并后的文件内容,展示给用户确认后才写入,严禁未经确认直接写入
    • 保留目标/分支:git checkout --ours/--theirs {file}
    • 用户编辑:等待用户编辑完成后 git add {file}
  2. 逐个 add 已解决文件:git add {file}(禁止 git add .
  3. 展示 git diff --cached --stat,用户确认后完成提交

验证

  • cd backend && go build ./...
  • cd frontend && bun run build
  • 失败则提供回退选项:git reset --soft HEAD~1git reset --hard merge-before-{分支名},由用户决定

断点

每个分支完成后询问是否继续,暂停则记录进度。

5. 清理

删除分支

输出合并结果表,逐个确认删除:

  • 本地:git branch -d {分支}
  • 远端:独立确认后 git push origin --delete {分支}

锚点

询问是否保留安全锚点标签。

总结

输出:目标分支、安全锚点标签、成功/失败/跳过数量、冲突解决文件数、已删除分支、保留分支及原因。