其实大多数人都不会好好写 git 提交信息,甚至有些人根本不写,直接用默认的 "Update" 或 "Fix bug" 之类的提交信息。
虽然现代码都不是人写的了,但是 git 提交信息除了提高可维护、团队协作,其实也很方便 AI 追踪排查问题,还是很重要的。
我过去都是用 vscode 自带的提交信息生成,但是那个缺少模型对话的上下文,生成效果不好,所以还是用一个 skill 比较好。
这个 skill 有几个注意事项我写到后面了。
---
description: 智能提交:有暂存文件则提交暂存内容,否则提交所有已追踪的改动,使用中文提交信息
argument-hint: "[可选的补充说明,会作为提交信息的参考]"
allowed-tools: Bash(git status:*), Bash(git diff:*), Bash(git add:*), Bash(git commit:*), Bash(git log:*)
---
# git-commit
根据下面的规则提交当前仓库的改动,**只提交、不要 push**。
## 当前 Git 状态
- 分支与状态:!`git status --short --branch`
- 已暂存文件:!`git diff --cached --name-only`
- 已暂存改动概览:!`git diff --cached --stat`
- 工作区未暂存改动概览:!`git diff --stat`
- 最近 5 条提交(用于参考提交信息风格):!`git log --oneline -5`
## 提交规则
1. **判断是否有暂存文件**:若上面「已暂存文件」列表非空,说明用户已自行选择了提交范围 —— **只提交这些已暂存的文件,不要再 `git add` 任何东西**。
2. **没有暂存文件时**:执行 `git add -u` 暂存所有「已被 Git 追踪」的修改与删除(**不包含新增的未追踪文件**),然后提交。
3. 提交前用 `git diff --cached` 查看完整暂存内容,确保提交信息准确反映真实改动。
4. **提交信息用简体中文**,遵循仓库已有风格(参考上面最近的提交):
- 首行:`<类型>: <一句话概述>`(类型如 feat / fix / refactor / chore / docs / style 等,按改动性质选择)
- 如改动较多,空一行后用 `-` 列出要点
- 若用户在 `$ARGUMENTS` 中提供了补充说明,将其作为概述的重要参考
- 提交信息末尾追加一行:
```
Commit-By: {your app name ,your model name}
```
5. **边界情况**:
- 若按规则确定后仍没有任何可提交的内容(工作区干净),直接告知用户「没有可提交的改动」并停止,不要创建空提交。
- 不要使用 `git commit --amend`、不要 `git push`、不要新建分支或切换分支。
- 若存在合并冲突标记或仓库处于 rebase/merge 中,停止并提示用户先处理。
6. 提交完成后,运行 `git log --oneline -1` 和 `git status --short`,向用户简要汇报:提交哈希、提交信息首行、本次提交了哪些文件。
用户补充说明(可能为空):$ARGUMENTS
注意 1:
这个技能会先判断是否有暂存的代码: 如果有,则本次只提交暂存代码 否则才是自动暂存所有已追踪的改动并提交
注意 2:
-
提交信息末尾追加一行:
Commit-By: {your model name}
skill 里这部分原本是为了区分是哪个 agent 和 model 的提交。但我实际使用时删除了。 原因就是臭名昭著的 Claude Code 根据提交信息把订阅变 API 付费的那个“BUG”,我担心哪家 agent 再暗藏什么玄机,以防万一还是去了吧。