--- name: "source-command-split-commit" description: "将当前未提交改动拆分为多个符合规范的原子提交" --- # source-command-split-commit Use this skill when the user asks to run the migrated source command `split-commit`. ## Command Template 将当前未提交改动拆分为多个原子提交。执行前会分析变更、生成分组方案,经用户确认后逐组提交。 ## 执行流程 ### 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 ` 或 `git add -p ` 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 -` 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 ∈ {`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 失败 --- 开始执行请回复 **"开始"**,或告知需要的调整。