4.8 KiB
4.8 KiB
请对当前项目中所有 dev* 分支进行智能合并到目标分支(默认 main),按以下流程执行。
约束(全局,不可违反)
- 所有操作(合并、删除)执行前必须用提问工具获得用户确认
- 冲突文件严禁自主编辑,仅分析方案后交用户选择
- 全程仅使用
git merge,禁止 rebase(rebase 会重写目标分支历史) git add仅指定已解决冲突的文件路径,禁止git add ./git add -Agit reset --hard仅配合安全锚点 tag 使用,禁止裸用- 禁止自动
git stashgit 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. 逐个合并
对每个分支重复以下流程:
准备
- 确认工作区干净、当前在目标分支
git tag merge-before-{分支名}创建分支级安全锚点- 向用户确认即将合并的分支及风险
执行
git merge {分支} --no-ff
- 无冲突 → 进入验证
- 有冲突 → 进入冲突处理
冲突处理(三层渐进)
git diff --name-only --diff-filter=U 列出冲突文件,然后按以下三层逐步展开:
第一层:冲突概览表
向用户展示所有冲突文件的摘要,每文件一行:
| 文件 | 冲突区域 | 冲突类型 | 目标分支改动 | 合并分支改动 | 推荐方案 |
|---|
- 冲突类型:双方修改同一区域 / 一方删除一方修改 / 文件重命名冲突等
- 改动描述:精简到关键差异(如"新增 rateLimit 字段"而非展示原文)
- 推荐方案:根据分析给出最合理的选项
用提问工具让用户选择处理方式:
- 批量处理:对推荐方案无异议的文件一键确认
- 逐个审查:用户指定要详细审查的文件,进入第二层
- 放弃合并:
git merge --abort,跳过当前分支,继续下一个
第二层:单个文件详情(按需)
仅展示用户指定审查的文件:
- 冲突区域的上下文(前后几行非冲突代码)
- HEAD 侧与分支侧的具体差异(精简 diff,非完整文件内容)
- 方案选项:双保留 / 保留目标(--ours) / 保留分支(--theirs) / 用户编辑 / 放弃合并
若用户仍觉信息不足,进入第三层。
第三层:原始冲突标记(按需)
展示用户指定文件的完整 <<<<<<</=======/>>>>>>> 原始标记内容。
确认与提交
- 方案全部确定后逐个执行:
- 双保留:AI 生成合并后的文件内容,展示给用户确认后才写入,严禁未经确认直接写入
- 保留目标/分支:
git checkout --ours/--theirs {file} - 用户编辑:等待用户编辑完成后
git add {file}
- 逐个 add 已解决文件:
git add {file}(禁止git add .) - 展示
git diff --cached --stat,用户确认后完成提交
验证
cd backend && go build ./...cd frontend && bun run build- 失败则提供回退选项:
git reset --soft HEAD~1或git reset --hard merge-before-{分支名},由用户决定
断点
每个分支完成后询问是否继续,暂停则记录进度。
5. 清理
删除分支
输出合并结果表,逐个确认删除:
- 本地:
git branch -d {分支} - 远端:独立确认后
git push origin --delete {分支}
锚点
询问是否保留安全锚点标签。
总结
输出:目标分支、安全锚点标签、成功/失败/跳过数量、冲突解决文件数、已删除分支、保留分支及原因。