# Commit Msg

> 为 Yakit 仓库完成一次本地提交：确定提交范围（暂存区优先，空则弹框确认）、基于 diff 归纳一行符合仓库风格的 message、commit 前弹窗确认、执行 git commit（不推送）。只要 message 时仅输出文本。用户说「提交」「commit 代码」或输入 /commit-msg，或被 create-pr 等 skill 调用时使用。

- Skill: `yaklang/commit-msg` (Agent Skill)
- Install (CLI): `npx skillmds@latest add yaklang/commit-msg`
- Raw SKILL.md: https://api.skillmd.com/api/skills/yaklang/commit-msg/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: yaklang (https://skillmd.com/u/yaklang)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/yaklang/commit-msg

---


# commit-msg

确定范围 → 把提交意图压成一行 message → 弹窗确认 → `git commit`。message 是意图概括，不是逐文件罗列。

## 调用

| 情况 | 行为 |
| --- | --- |
| 默认（语义触发、`/commit-msg`、被其他 skill 调用） | 完整流程 |
| 「仅要 message」（含「写 / 生成 commit message」「写个提交信息」类措辞） | 只输出一行 message，不改仓库 |
| 已给出 message（如「用 fix: xxx 提交」） | 跳过生成，直接弹窗确认后 commit |

## 终态

供用户与调用方（如 `create-pr`）核验。`create-pr` 仅在 `COMMITTED` 且实测 HEAD 前移、`git diff --cached` 为空时继续。

| 终态 | 含义 |
| --- | --- |
| `COMMITTED` | 成功；附 SHA 与文件清单；HEAD 已前移、暂存区已清空 |
| `CANCELLED` | 用户取消任一弹窗；未改 git 状态 |
| `FAILED` | commit 失败（如 hook 拒绝）；附报错原文与当时 index/工作区状态。hook 可能留下部分改动，不得谎称已恢复 |

## 流程

1. **读暂存区**：`git status --short` + `git diff --cached`，不能只靠文件名。
   - 暂存区非空：只提交暂存内容，不要 `git add` 其它未暂存改动。
   - 暂存区空、工作区有改动：`AskUserQuestion`「暂存全部改动并提交」（`git add -A`）／「取消，不提交」。未同意前不 `git add`。取消 → `CANCELLED`。
   - 都空：停止。
2. **对齐风格**：`git log --oneline -10`。贴近仓库习惯，不要强套 Conventional Commits；新提交优先 `type: subject`。
3. **归纳主语义**：覆盖暂存区全部改动的一个更高层概括。多类改动找主目的；过散也给一行诚实概括。
4. **弹窗确认**：`AskUserQuestion` 展示 message + 文件清单，「确认提交」／「取消」。Other 输入视为新 message。未确认不得 `git commit`。取消 → `CANCELLED`。
5. **提交**：message 写入临时文件后 `git commit -F <文件>`，再删临时文件。**禁止 `git commit -m "..."`**（反引号 / `$()` / 引号会破坏 shell）。成功 → `COMMITTED`（SHA + 文件清单）。失败 → `FAILED`（报错原文 + 实际 git 状态），不隐藏、不重试掩盖。
6. **不推送**。

## Message 规范

`<type>: <subject>` 或 `<type>(<scope>): <subject>`。无明确 scope 则省略（Yakit 多数无 scope）。

- 祈使语气（添加 / 修复 / 更新 / 优化），中文为主，术语/组件名保留英文。
- 无句号；尽量 ≤72 字符（中文按 2 计）。
- 禁止 WIP、misc、update files、修改、调整；不要手写 `(#PR号)`（GitHub 合并 PR 时自动加）。

| type | 用途 |
| --- | --- |
| `feat` | 新功能 / 页面 / 选项 |
| `fix` | 用户可见行为修正 |
| `perf` | 性能 |
| `refactor` | 重构（行为不变） |
| `style` | 样式 / UI（无逻辑变化） |
| `docs` | 文档（含 AGENTS.md、README、注释） |
| `test` | 测试 |
| `build` | 构建 / 依赖 / Vite / electron-builder |
| `ci` | CI |
| `chore` | 脚本、工程化、版本号 |

scope 例：`webfuzz`、`agents`、`renderer`、`electron`、`aiAgent`、`License`。

## 示例

```
feat: 添加支持多子Agent的配置选项
fix: 暗色主题下关闭记事本时内容区闪白
docs(agents): 完善启动指南的依赖检查与用户决策弹框交互
build(renderer): 将主渲染端与 Link 从 CRA/Vite6 迁移至 Vite 8
```

