请对当前项目中所有 `dev*` 分支进行智能合并到目标分支(默认 main),按以下流程执行。 ## 约束(全局,不可违反) - 所有操作(合并、删除)执行前必须用提问工具获得用户确认 - 冲突文件严禁自主编辑,仅分析方案后交用户选择 - 全程仅使用 `git merge`,禁止 rebase(rebase 会重写目标分支历史) - `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~1` 或 `git reset --hard merge-before-{分支名}`,由用户决定 ### 断点 每个分支完成后询问是否继续,暂停则记录进度。 ## 5. 清理 ### 删除分支 输出合并结果表,逐个确认删除: - 本地:`git branch -d {分支}` - 远端:独立确认后 `git push origin --delete {分支}` ### 锚点 询问是否保留安全锚点标签。 ### 总结 输出:目标分支、安全锚点标签、成功/失败/跳过数量、冲突解决文件数、已删除分支、保留分支及原因。