# Changelog Merge 功能 - 合并发布版本的 CHANGELOG

## 用途

将发布分支（vVERSION）上的 CHANGELOG 更新内容合并到 main 分支，执行流程：
1. 验证输入并检查分支（如果 vVERSION 分支不存在则直接终止）
2. 在 main 分支时创建工作分支
3. 切换到 vVERSION 分支
4. 提取 VERSION 的 CHANGELOG 更新内容
5. 切换回工作分支
6. 调用 `references/changelog.md` 更新 CHANGELOG.md
7. 执行 git 提交
8. 通过 `glab` 创建 Merge Request

## 输入

- `VERSION`（必填）：目标版本号（格式：x.x.x）

## 执行步骤

### 步骤零：验证输入

1. **检查用户是否提供了版本号**：
   - 如果用户未提供版本号，提示用户：`"错误：请提供版本号，格式为 x.x.x（例如：2.19.0）"`
   - 终止执行

2. **验证版本号格式**：
   - 检查版本号是否符合 `x.x.x` 格式
   - 如果格式不正确，提示用户：`"错误：版本号格式不正确，请使用 x.x.x 格式（例如：2.19.0）"`
   - 终止执行

### 步骤一：验证输入并检查分支

1. **检查当前分支**：
   - 执行 `git branch --show-current` 获取当前分支名称，记为 `CURRENT_BRANCH`
   - **如果命令失败**，提示用户：`"错误：无法获取当前分支名称，请检查 git 仓库状态。"` 并终止执行
   - **如果 `CURRENT_BRANCH` 是 `main` 分支**：
     - 将 `changelog-VERSION` 记为 `WORK_BRANCH`
   - **如果 `CURRENT_BRANCH` 不是 `main` 分支**：
     - 将 `CURRENT_BRANCH` 记为 `WORK_BRANCH`

2. **检查发布分支是否存在**：
   - 执行 `git rev-parse --verify vVERSION` 检查发布分支是否存在
   - **如果分支不存在**，提示用户：
     > "错误：分支 vVERSION 不存在，请确认版本号是否正确。"
     并终止执行
   - **如果分支存在**，继续执行

### 步骤二：切换到发布分支

1. 执行 `git checkout vVERSION` 切换到 tag 分支

### 步骤三：提取 CHANGELOG 更新内容

1. 读取 tag 分支上的 `CHANGELOG.md` 文件
2. 提取 `## VERSION` 标题下的完整更新内容（包括分类和条目）
3. 将提取的内容记为 `COPY_CHANGELOG`

### 步骤四：切换回工作分支

1. 执行 `git checkout WORK_BRANCH` 切换回步骤一中记录的分支

### 步骤五：更新 CHANGELOG.md

调用 `references/changelog.md`，传入：
- `VERSION`：目标版本号
- `UPDATE_CONTENT`：从步骤三中提取的 `COPY_CHANGELOG` 内容

### 步骤六：Git 提交

1. 执行 `git add CHANGELOG.md`
2. 执行 `git commit -m "changelog: Merge release VERSION"`
   - **如果提交失败**，提示用户：`"错误：git commit 失败，请检查是否有未暂存的更改。"` 并终止执行
3. 执行 `git push`
   - **如果推送失败**，提示用户：`"错误：git push 失败，请检查网络连接和远程仓库权限。"` 并终止执行

### 步骤七：创建 Merge Request

1. **创建 Merge Request**
   - 执行 `glab mr create --title "changelog: Merge release VERSION" --target-branch main --assignee @me --yes`
   - **如果创建失败**，提示用户：`"错误：创建 MR 失败，请检查 glab 配置和网络连接。"`（git 操作已完成，不受影响）
   - 创建成功后，输出 MR 链接

## 执行要求

1. 必须提供版本号，否则终止执行
2. 严格按照步骤顺序执行
3. 如果 vVERSION 分支不存在，提示用户并终止
4. 确保 CHANGELOG 更新内容准确对应目标版本号
5. 在 main 分支上时自动创建 changelog-VERSION 分支
6. **MR 创建规则**：
   - git push 成功后自动创建 MR
   - MR 标题复用 commit message
   - MR 自动 assign 给当前用户
   - 目标分支始终为 `main`

## 示例

### 示例 1（当前在 main 分支）

用户输入：
```
/combo-sdk-unity-release-manager changelog-merge 2.19.0
```

执行流程：
1. 验证输入：版本号 2.19.0
2. 当前分支是 main，创建 changelog-2.19.0 分支
3. 切换到 v2.19.0 分支
4. 读取 CHANGELOG.md，提取 `## 2.19.0` 下的更新内容
5. 切换回 changelog-2.19.0 分支
6. 调用 `changelog.md` 更新 CHANGELOG.md
7. 执行 git 提交：
   - `git add CHANGELOG.md`
   - `git commit -m "changelog: Merge release 2.19.0"`
   - `git push`
8. 创建 MR：`changelog-2.19.0` → `main`

### 示例 2（当前在非 main 分支）

假设当前在 `feature/release` 分支

用户输入：
```
/combo-sdk-unity-release-manager changelog-merge 2.19.0
```

执行流程：
1. 验证输入：版本号 2.19.0
2. 当前分支是 feature/release，记录为 WORK_BRANCH
3. 切换到 v2.19.0 分支
4. 读取 CHANGELOG.md，提取 `## 2.19.0` 下的更新内容
5. 切换回 feature/release 分支
6. 调用 `changelog.md` 更新 CHANGELOG.md
7. 执行 git 提交：
   - `git add CHANGELOG.md`
   - `git commit -m "changelog: Merge release 2.19.0"`
   - `git push`
8. 创建 MR：`feature/release` → `main`

### 示例 3（分支不存在）

用户输入：
```
/combo-sdk-unity-release-manager changelog-merge 2.99.0
```

执行流程：
1. 验证输入：版本号 2.99.0
2. 尝试切换到 v2.99.0 分支
3. 分支不存在，提示用户：
   > "错误：分支 v2.99.0 不存在，请确认版本号是否正确。"
4. 终止执行
