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

121 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
请对当前项目中所有 `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~1``git reset --hard merge-before-{分支名}`,由用户决定
### 断点
每个分支完成后询问是否继续,暂停则记录进度。
## 5. 清理
### 删除分支
输出合并结果表,逐个确认删除:
- 本地:`git branch -d {分支}`
- 远端:独立确认后 `git push origin --delete {分支}`
### 锚点
询问是否保留安全锚点标签。
### 总结
输出:目标分支、安全锚点标签、成功/失败/跳过数量、冲突解决文件数、已删除分支、保留分支及原因。