| name | pdd-pr-merge |
| description | 合并 PR 并触发归档流程。当用户需要合并已审查通过的 PR、完成功能点交付、完成交付时调用此Skill。支持 GitHub 模式和本地模式。即使用户只说"合并PR"、"完成交付"、"merge"、"合并",也应触发此Skill。
|
| license | MIT |
| compatibility | 需要 OpenSpec Change ID 或 PR 编号 |
| metadata | {"author":"neuqik@hotmail.com","version":"1.0","parent":"pdd-main"} |
pdd-pr-merge
Description: 合并 PR 并触发归档流程。支持 GitHub 模式和本地模式。
Details: 合并 PR 并触发归档
Input: OpenSpec Change ID 或 PR 编号
执行流程
1. 前置检查
1. 获取 PR 状态
├── GitHub 模式: 从 GitHub API 获取
└── 本地模式: 从 pr-record.md 获取
2. 确认 PR 状态为 Open
└── 已合并/已关闭的 PR 无法再次合并
3. 确认无 Blocking 问题
├── 有 Blocking → 提示用户修复
└── force=true → 跳过检查
4. 确认用户有合并权限
└── 本地模式: 跳过权限检查
2. 合并 PR
GitHub 模式:
├── 执行 GitHub Merge
│ ├── squash=true → Squash and merge
│ └── squash=false → Merge commit
├── 添加合并记录
└── 更新 PR 状态为 merged
本地模式:
├── 切换到 main 分支
├── 合并 Feature Branch
│ ├── squash=true → git merge --squash
│ └── squash=false → git merge
├── 提交合并
└── 更新 pr-record.md 状态
3. 清理分支
GitHub 模式:
├── 删除远程 Feature Branch
└── 删除本地 Feature Branch
本地模式:
└── 删除本地 Feature Branch
4. 触发归档
根据来源触发归档:
OpenSpec Change:
├── 执行 /openspec-archive-change {change-id}
└── 移动到 archive 目录
PDD 功能点:
├── 更新功能点状态为 completed
└── 更新功能点矩阵
批量 PR:
├── 逐个归档所有 Change
└── 更新批量 PR 记录
5. 推送到远程
GitHub 模式:
└── 自动推送(已通过 GitHub API)
本地模式:
├── 不自动推送(等网络通后人工 push)
├── 只提交到本地 Git
└── 提示用户手动推送命令
6. 生成合并报告
输出:
├── 合并摘要
├── 变更统计
├── 归档状态
└── 后续操作
输出格式
GitHub 模式
## PR 合并完成
**PR 编号**: #123
**Change ID**: c-001-xxx
**合并方式**: Squash
**合并时间**: 2026-03-21 15:30:00
### 合并内容
- 提交数: 3
- 文件变更: 5
- 新增行数: +150
- 删除行数: -20
### 归档状态
- OpenSpec Change: ✅ 已归档
- 归档路径: `openspec/changes/archive/2026-03-21-c-001-xxx/`
### 后续操作
- 查看归档内容: `openspec/changes/archive/2026-03-21-c-001-xxx/`
- 查看主规格: `openspec/specs/workflow-permission-control/spec.md`
本地模式
## PR 合并完成(本地模式)
**Change ID**: c-001-xxx
**分支**: change/c-001-xxx → main
**合并方式**: Squash
**合并时间**: 2026-03-21 15:30:00
### 合并内容
- 文件变更: 5
- 新增行数: +150
- 删除行数: -20
### 归档状态
- OpenSpec Change: ✅ 已归档
- 归档路径: `openspec/changes/archive/2026-03-21-c-001-xxx/`
### ⚠️ 推送提醒
本地模式已合并到本地 main 分支,**未推送到远程**。
网络恢复后请手动推送:
```bash
git push origin main
后续操作
- 查看归档内容:
openspec/changes/archive/2026-03-21-c-001-xxx/
## 参数
| 参数 | 类型 | 必需 | 默认值 | 描述 |
|------|------|------|--------|------|
| `change_id` | string | 否 | - | OpenSpec Change ID |
| `pr_number` | number | 否 | - | GitHub PR 编号 |
| `force` | boolean | 否 | false | 强制合并(忽略 Warning) |
| `squash` | boolean | 否 | true | 是否 Squash 合并 |
## 错误处理
### 有 Blocking 问题
❌ 存在 Blocking 问题,无法合并
Blocking 问题:
- [B-001] 单元测试失败
- [B-002] 测试覆盖率不足
请修复问题后重新审查: /pdd-pr-create c-001-xxx --re-review
如需强制合并: /pdd-pr-merge c-001-xxx --force
### PR 已合并
❌ PR 已合并
PR 编号: #123
合并时间: 2026-03-21 14:00:00
该 PR 已经合并,无需重复操作。
### 推送失败(本地模式)
⚠️ 推送到远程失败
错误: Network error
请手动推送:
git push origin main
推送后确认归档完成。
## 与其他技能的协作
pdd-pr-merge
│
├── 被调用方
│ ├── pdd-pr-review (确认后调用)
│ └── 用户直接调用
│
└── 调用方
└── openspec-archive-change (触发归档)
## 合并策略
### Squash Merge(默认)
优点:
├── 保持 main 分支历史整洁
├── 每个 Change 对应一个提交
└── 便于回滚整个 Change
缺点:
├── 丢失详细提交历史
└── 不适合多人协作的 Change
### Merge Commit
优点:
├── 保留完整提交历史
├── 便于追踪每个小改动
└── 适合多人协作
缺点:
├── main 分支历史复杂
└── 回滚需要多个操作
---
## PR管理规范
详见 [pdd-pr-create SKILL.md](./pdd-pr-create/SKILL.md#pr管理规范)
### 归档时机
- **归档**: 用户手动触发
- **命令**: `/openspec-archive-change [change-id]`
- **前提条件**:
- PR已合并
- 用户确认归档
---
## PDD实施规范引用
本Skill遵循PDD框架实施规范,详见 [pdd-framework-design.md 第9章](../docs/pdd-framework-design.md#9-pdd-实施规范)。