关于 vcs-commit-msg
依据项目历史撰写符合既有风格的版本控制提交信息。它会识别惯例、询问不明确之处,并在提交前展示草稿供确认。
主要功能
- 01从历史记录分析提交风格
- 02支持 git、hg、jj 和 svn 日志
- 03询问不明确的惯例
- 04提交前审阅草稿
- 05移除 AI 署名
适用场景
- 01匹配仓库的提交信息风格
- 02厘清不明确的消息惯例
- 03提交前检查消息草稿
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ petr-korobeinikov/ skills --skill vcs-commit-msg安装后在 Claude Code 中输入/vcs-commit-msg确认已加载。
详细介绍
vcs-commit-msg
编写符合项目现有风格的提交消息。 从历史记录中检测风格。 如果信号不够明确,就询问用户。 提交前展示结果。 绝不将更改归功于 AI Agent 或模型。
范围
此技能仅适用于提交消息文本。 不适用于分支名称、 PR 标题或描述、 标签消息, 或提交消息缓冲区以外的任何内容。
流程
1. 检测风格
编写前先抽样查看近期历史记录。
对于 git:
git log -n 100 --no-merges \
--pretty=format:'--- commit ---%nauthor: %an <%ae>%nsubject: %s%nbody:%n%b'
每个提交都以 --- commit --- 块呈现,并明确包含
author:、subject: 和 body: 字段。
body: 为空表示该提交没有正文。
对于其他 VCS(hg、jj、svn), 使用各工具的日志/模板语法生成等效样本。 每个提交的输出必须包含:
- 清晰的提交边界标记;
- 作者姓名和邮箱;
- 主题(消息的第一行);
- 正文(其余各行,可以为空)。
对于 svn,请使用 svn log --xml,
因为 svn 没有灵活的模板语言。
过滤明显的机器人提交——尽力而为, 无需保证完全覆盖:
- 作者邮箱或显示名称包含子字符串
[bot]; - 作者邮箱为
[email protected], 或包含已知的机器人标记 (dependabot、renovate、github-actions、-bot@); - 主题匹配
^Merge pull request #/^Merge branch/^Revert "。
允许少量机器人提交漏网—— 不要追求 100% 过滤。
对于下面的每个维度, 如果 ≥80% 的过滤后样本符合某一模式, 则判定该模式为主流; 否则,该维度为无法确定。
维度:
- 主题格式 —
Conventional Commits(
feat: ...、fix(scope): ...)、 工单优先/任务优先前缀 (PROJ-123: ...、[PROJ-123] ...)、 普通祈使句(“Add ...”)、 描述性(“Added ...”、“Adds ...”), 或其他; - 语言 — 英语、俄语等;
- 大小写 — 首字母大写/小写、 是否以句点结尾;
- 主题长度上限 — 在 50、72、80 中,选择能满足 ≥80% 主题长度要求的最小值;
- 是否有正文 — ≥80% 的提交有正文时,判定通常有正文; ≥80% 的提交没有正文时,判定通常没有正文;
- 正文换行列数 — 在 72、80、100 中,选择能满足 ≥80% 正文行长度要求的最小值;
- 常用尾注 —
Signed-off-by、Closes #、Fixes #、Refs:等。
2. 询问无法确定的维度
如果任何维度无法确定—— 包括空仓库,因为按定义所有维度都无法确定—— 请在编写前明确询问用户。 将所有问题合并到一条消息中; 不要逐个询问。
用户明确提出的要求——无论是语言还是其他维度—— 始终优先于检测结果。
3. 编写
按照检测到或选定的风格 编写主题(以及适用时的正文)。 对于工单前缀惯例, 从分支/书签名称中获取工单号; 如果名称中没有,则询问用户。 正文内容风格遵循检测到的惯例—— 不要用历史记录未体现的外部最佳实践取而代之。
4. 不归功于 AI
编写的消息不得以任何形式提及任何 AI Agent、模型或 工具(Claude、ChatGPT / GPT、Copilot、Cursor、Gemini、Aider、 Codex、Codeium / Windsurf、Replit AI、JetBrains AI、Tabnine、 Cody、Devin 等):
- 不得添加 AI 账号的
Co-Authored-By:尾注 ([email protected]、[email protected]、 类似的机器邮箱地址); - 不得添加“Generated with ...”、 “Made by ...”、 “Authored by ...”等行;
- 主题或正文中不得提及。
按照项目惯例,可以添加人类的 Co-Authored-By: 和 Signed-off-by 尾注。
无论提交消息缓冲区中已有何种内容,这些规则都从头适用——
包括修改或重写提交时的旧消息、
commit.template 内容、
其他钩子或工具插入的文本,
或先前的草稿。
删除已有的任何 AI 归功内容;
不要沿用。
5. 应用前先展示
始终先向用户展示拟好的消息, 并询问是否合适,然后再提交。 简要说明从历史记录中检测到哪些维度, 以及哪些是用户手动确定的,让用户知道选项的依据。 只有在用户接受后,才使用 VCS 的标准提交/修正命令应用。