关于 git-commit
为 Git 仓库生成提交说明的技能,面向需要依据实际改动撰写提交信息的开发者。它先检查差异、仓库规范和近期提交,再确定提交类型、范围及语言。
主要功能
- 01检查暂存或未暂存差异
- 02读取仓库提交规范
- 03参考近期提交语言
- 04选择提交类型与范围
- 05按需补充提交正文
适用场景
- 01为已检查的改动撰写提交信息
- 02按项目惯例调整提交标题
- 03识别应拆分的混合改动
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ fan-s-collective/ git-commit-skills --skill git-commit安装后在 Claude Code 中输入/git-commit确认已加载。
附带文件agents/openai.yamlSKILL-CN.md
详细介绍
Git Commit
概述
根据仓库中的实际变更编写提交消息。优先使用简洁、聚焦意图的消息,而不是逐个文件总结差异。将 references/commit-convention.md 作为基准风格指南,再根据当前仓库调整范围和措辞。
工作流
-
先检查变更集。
- 有暂存变更时,优先使用
git diff --staged。 - 没有暂存差异,或用户询问未暂存的变更时,使用
git diff。 - 使用
git status --short了解文件范围。 - 如果仓库包含提交规范文件,请先阅读再编写消息。检查可能的文件名,例如
COMMIT_CONVENTION.md、CONTRIBUTING.md、.github/COMMIT_CONVENTION.md或.github/CONTRIBUTING.md。 - 使用
git log --format=%s -n 20检查近期提交主题,以判断仓库偏好的输出语言。遵循历史记录中占主导地位的语言。如果近期提交主题语言混杂,无法判断主导语言,或者没有提交历史或其他错误导致无法检查,则默认使用英语。
- 有暂存变更时,优先使用
-
选择一种提交意图。
- 如果变更包含无关的意图,建议拆分提交。
- 如果用户仍希望使用一条消息,则选择占主导地位的意图,并简要说明取舍。
-
选择标题:
<type>(<scope>): <subject>
- 仅在有助于说明意图、影响、兼容性、迁移或混合变更类型时添加正文。
类型选择
feat:新功能fix:错误或缺陷修复perf:性能改进refactor:重构实现,但不改变外部行为style:仅调整格式或代码风格test:新增或调整测试docs:文档或注释chore:依赖、构建、脚手架和其他杂项维护ci:CI 变更types:类型定义变更revert:撤销已有提交wip:临时的进行中提交
对于混合变更,可以拆分提交,也可以在标题中使用占主导地位的类型,并在正文的项目符号前添加类型前缀。
范围选择
根据当前仓库确定 scope。除非参考文件中的范围与实际变更路径或本地惯例相符,否则不要沿用。
按以下优先级选择:
- 使用仓库自身提交规范中明确规定的范围。
- 使用变更路径中的稳定工作区、软件包、应用或模块名称,例如
api、web、cli、core、ui、docs或软件包名称。 - 仅当变更明显集中在某个子模块,且其名称可复用时,才使用更精确的长期子模块名称。
- 对仓库级、跨领域或无法归入单一模块的变更,使用
repo。
如果仓库规范不要求有意义的范围,且本地风格允许不带范围的标题,则可以省略范围。
主题和正文
将主题写成变更的核心意图。保持简短、具体且以行动为导向。避免使用 update、fix bug 或 optimize code 等含糊主题。
根据仓库近期提交历史匹配输出语言。能明确判断时,使用占主导地位的语言。如果近期历史语言不一致或混杂,或者没有提交历史或发生其他检查错误,则默认使用英语编写提交消息。
在有帮助时编写正文:
- 说明意图、影响和必要背景。
- 避免逐项重复每个变更文件。
- 如果所有项目符号都属于同一变更类型,则不必在每条前重复类型。
- 如果提交混合了多种变更类型,则在正文项目符号前添加
type:。
示例:
feat(auth): add session refresh flow
- 增加会话刷新入口,减少登录态过期后的重复认证
- 补齐旧 token 兼容逻辑,避免升级后状态丢失
refactor: align release workflow
- refactor: 收敛构建与发布脚本的职责边界
- fix: 修正缺少版本号时的默认值异常
- docs: 补充新的发布流程说明
参考
阅读 references/commit-convention.md,了解 Conventional Commits 的基准规则和示例。根据当前仓库的结构覆盖其中的范围示例。
评论
支持 Markdown