关于 commit
commit 技能为开发者提供撰写 Git 提交信息和整理提交的规范。它聚焦原子化变更、Conventional Commits 格式、差异审查与消息校验。
主要功能
- 01拆分原子化提交
- 02遵循 Conventional Commits 格式
- 03撰写简洁且说明意图的主题
- 04提交前审查暂存差异
- 05使用脚本校验提交信息
适用场景
- 01提交前区分无关变更
- 02为功能或修复编写提交信息
- 03标注破坏性变更
- 04校验提交消息格式
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ hrdtbs/ agent-skills --skill commit安装后在 Claude Code 中输入/commit确认已加载。
附带文件scripts/validate-commit.sh
详细介绍
提交最佳实践
此技能可确保你的提交逻辑清晰、原子化且结构规范。提交不仅是一个保存点,更是一种沟通工具,帮助未来的开发者(和 AI Agent)理解代码库的历史和意图。
🧠 思维方式与理念
- 传达意图,而不仅是操作: 代码已经告诉我们发生了什么变化。提交消息必须说明变化的原因。
- 原子化提交: 一个提交应该只做一件事。如果一个提交既修复了错误又添加了功能,就应该拆分为两个提交。这样回滚、变基和审查都会容易得多。
- 面向未来的读者: 撰写提交消息时,要设想自己正在向一位六个月后凌晨 3 点排查问题的人解释这项改动。
🚫 反模式
- 避免在正文中描述代码的作用。 不要写“我在第 42 行添加了一条 if 语句”。应写“添加空值检查,避免用户资料缺失时发生崩溃”。
- 避免在提交消息中使用表情符号。 这样可以确保兼容所有终端环境,并使 Git 历史记录保持统一、专业且易于搜索。
- 避免使用含糊的主题。 “修复错误”“更新文件”“WIP”都毫无用处。查看
git log --oneline时,它们无法提供任何上下文。 - 避免捆绑无关改动。 如果你在处理
auth系统时发现README.md中有拼写错误,应将拼写修复与auth功能分开提交。 - 避免在提交前不检查自己的差异。 务必运行
git diff --cached或检查已暂存的更改,确保没有意外包含调试语句(console.log、print)或密钥。
📝 步骤与工作流
创建提交前,请遵循以下步骤:
- 检查差异: 你具体要提交什么?是否包含无关改动?
- 确定类型: 选择最合适的 Conventional Commits 类型。
- 起草消息: 撰写主题行;如有必要,再撰写详细正文说明原因。
- 共同作者: 在提交消息正文末尾为 AI Agent 和用户添加
Co-authored-by:。 - 验证: 根据要求检查起草的消息格式。
🏷️ Conventional Commits 格式
格式: <type>[optional scope][optional !]: <description>
有效类型
feat:新功能fix:错误修复docs:仅涉及文档的更改style:不影响代码含义的更改(空白、格式、缺少分号等)refactor:既不修复错误也不添加功能的代码更改perf:提升性能的代码更改test:添加缺失的测试或修正现有测试build:影响构建系统或外部依赖项的更改ci:CI 配置文件和脚本的更改chore:其他不修改 src 或 test 文件的更改revert:撤销之前的提交
主题行规则
- 主题行不得超过 50 个字符,以确保在 Git 工具中显示良好。
- 使用祈使语气和现在时:“change”,而不是“changed”或“changes”。
- 避免首字母大写。
- 避免在末尾加句号。
正文规则(复杂更改建议填写)
- 与主题行之间空一行。
- 每行不超过 72 个字符。
- 说明是什么以及为什么,而不是如何实现。
破坏性更改
- 在主题行的冒号前添加
!(例如:feat(api)!: remove v1 endpoints)。 - 在正文末尾添加
BREAKING CHANGE: <description>。
💡 示例
示例 1:新功能 输入:添加基于 JWT 令牌的用户身份验证 输出:
feat(auth): implement JWT-based authentication
示例 2:附带上下文的错误修复 输入:修复用户连续两次点击登录按钮时发生的崩溃 输出:
fix(login): resolve crash on double click
The login button was missing a debounce handler, allowing users to
submit multiple network requests. Added a 500ms debounce to prevent
race conditions during authentication.
示例 3:破坏性更改
输入:更改 /users 端点的 API 响应,使其返回对象数组而不是单个对象
输出:
feat(api)!: return array of objects from /users endpoint
BREAKING CHANGE: The `/users` endpoint now returns an array of user
objects instead of a single user object. Clients will need to update
their parsing logic.
✅ 验证
提交前,请运行随附的验证脚本来验证消息格式。如果不确定脚本的位置,请根据 SKILL.md 路径查找,或使用 find。
# Example assuming you are in the repo root:
bash skills/commit/scripts/validate-commit.sh "your commit message"
评论
支持 Markdown