121 lines
4.8 KiB
Markdown
121 lines
4.8 KiB
Markdown
请对当前项目中所有 `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 {分支}`
|
||
|
||
### 锚点
|
||
|
||
询问是否保留安全锚点标签。
|
||
|
||
### 总结
|
||
|
||
输出:目标分支、安全锚点标签、成功/失败/跳过数量、冲突解决文件数、已删除分支、保留分支及原因。
|