135 lines
3.8 KiB
Markdown
135 lines
3.8 KiB
Markdown
---
|
||
name: split-commit
|
||
description: 将当前未提交改动拆分为多个符合规范的原子提交
|
||
---
|
||
|
||
将当前未提交改动拆分为多个原子提交。执行前会分析变更、生成分组方案,经用户确认后逐组提交。
|
||
|
||
## 执行流程
|
||
|
||
### Step 1: 前置检查
|
||
|
||
1. **清理残留文件**:若存在 `msg.txt`,先 `rm -f msg.txt`
|
||
2. **读取规范**:确认 `COMMIT_CONVENTION.md` 存在且可读
|
||
|
||
### Step 2: 保护分支检查
|
||
|
||
保护分支列表(按优先级):`AGENTS.md` > `.cursor/rules/` > `.git/config branch.protected` > 默认(`master|main|develop`)
|
||
|
||
若当前在保护分支,询问用户:
|
||
- **A** - 创建 feature 分支后继续拆分(推荐)
|
||
- **B** - 转移到新分支后压成单提交
|
||
- **C** - 取消
|
||
|
||
### Step 3: 盘点变更
|
||
|
||
执行以下命令分析:
|
||
- `git status` - 整体状态
|
||
- `git diff --stat` - 文件统计
|
||
- `git diff` - 详细改动
|
||
- `git diff --cached` - 已暂存改动
|
||
|
||
### Step 4: 规则化分组
|
||
|
||
按"意图一致"原则分组,**优先按 type 分,再按 scope 分**。
|
||
|
||
**必须拆分的情况**:
|
||
- 同一组可归属多个 type
|
||
- 同文件包含多个独立目的(如功能+重构)
|
||
- 资源替换与代码逻辑混合
|
||
|
||
**可以合并的情况**(最小拆分原则):
|
||
- 同一功能的多文件改动(脚本+Prefab)
|
||
- 同一模块的多个相关 Bug 修复
|
||
|
||
### Step 5: 生成方案表格
|
||
|
||
以表格形式展示拆分方案:
|
||
|
||
| 顺序 | 文件 | 变更目的 | 提交头 | 依据 | 方式 |
|
||
|------|------|----------|--------|------|------|
|
||
| 1 | `路径` | 描述 | `type(scope): subject` | 原因 | `git add`/`git add -p` |
|
||
|
||
**Type 选择优先级**:`fix` > `feat` > `art` > `audio` > `scene` > `yarn` > `perf|refactor|...`
|
||
|
||
**Scope 规则**:单模块用模块名(如 `blockpuzzle`),跨模块省略。
|
||
|
||
### Step 6: 用户确认
|
||
|
||
询问:`[Y 执行 / n 取消 / 提出调整]`
|
||
|
||
- 若调整:根据反馈修改方案,再次确认
|
||
- 若执行:进入 Step 7
|
||
- 若取消:清理并退出
|
||
|
||
### Step 7: 逐组提交
|
||
|
||
对每组执行:
|
||
1. `git add <file>` 或 `git add -p <file>`
|
||
2. 复查:`git diff --cached --stat` 和 `git diff --cached`
|
||
3. 写入 `msg.txt` 并提交:`git commit -F msg.txt`
|
||
4. 检查状态:`git status`
|
||
|
||
**失败处理**:
|
||
- `git add -p` 跳过关键 hunk → 暂停,提示处理方案
|
||
- pre-commit hook 失败 → 询问 [R]重试 [S]跳过 [A]中止
|
||
|
||
### Step 8: 结果校验
|
||
|
||
输出:
|
||
1. `git log --oneline -<N>`
|
||
2. 回放清单(验证 type/scope/subject 合规性)
|
||
3. 若不合规,询问是否修正
|
||
|
||
### Step 9: 清理
|
||
|
||
`rm -f msg.txt`
|
||
|
||
---
|
||
|
||
## Unity 改动速查表
|
||
|
||
| 改动类型 | type | scope 示例 |
|
||
|----------|------|-----------|
|
||
| 脚本逻辑修复 | `fix` | `blockpuzzle`, `dialog` |
|
||
| 脚本新功能 | `feat` | `huoshan`, `clue` |
|
||
| 美术资源(贴图/模型/动画) | `art` | 对应模块或省略 |
|
||
| 音频资源 | `audio` | `audio-kit` 或省略 |
|
||
| 场景配置(灯光/镜头) | `scene` | 对应模块或省略 |
|
||
| Yarn 对话 | `yarn` | `dialog` |
|
||
| 测试代码 | `test` | 对应模块 |
|
||
|
||
---
|
||
|
||
## 规范校验清单(执行前检查)
|
||
|
||
- [ ] 格式:`<type>(<scope>): <subject>` 或 `<type>: <subject>`
|
||
- [ ] type ∈ {`feat`,`fix`,`art`,`audio`,`scene`,`yarn`,`perf`,`refactor`,`style`,`docs`,`build`,`chore`,`test`}
|
||
- [ ] subject:中文、动词开头、≤50字、无句号
|
||
- [ ] 一次提交只做一件事
|
||
|
||
---
|
||
|
||
## 中文提交方法
|
||
|
||
由于 PowerShell 中文乱码问题,统一使用文件方式:
|
||
|
||
```bash
|
||
echo "type(scope): 描述" > msg.txt
|
||
git commit -F msg.txt
|
||
rm -f msg.txt
|
||
```
|
||
|
||
---
|
||
|
||
## 关于 Pre-commit Hooks
|
||
|
||
若配置了 husky/lint-staged:
|
||
- 每次提交都会触发检查
|
||
- 如需跳过(**不推荐**):`git commit -F msg.txt --no-verify`
|
||
- 跳过可能导致 CI 失败
|
||
|
||
---
|
||
|
||
开始执行请回复 **"开始"**,或告知需要的调整。
|