mcpField
C
commit-smart

commit-smart

github.com/davila7开发33.0k96 次安装今天更新
代码仓库

关于 commit-smart

用于分析 Git 变更并拟定 Conventional Commits 类型、范围和消息的技能。它会提供暂存建议,并在提交前请求确认。

主要功能

  1. 01检查工作区和差异
  2. 02建议暂存哪些文件
  3. 03判断提交类型和范围
  4. 04起草 Conventional Commits 消息
  5. 05提交前请求确认

适用场景

  1. 01功能变更后准备提交
  2. 02归类相关的未暂存文件
  3. 03检查拟定的提交消息

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/davila7/claude-code-templates --skill commit-smart

安装后在 Claude Code 中输入/commit-smart确认已加载。

详细介绍

智能提交

通过分析实际更改,创建有意义的 Conventional Commits 提交。

工作流

第 1 步:检查工作区

运行以下命令,了解当前状态:

git status
git diff --stat
git diff --cached --stat
第 2 步:处理未暂存的更改

如果没有暂存任何内容(git diff --cached 为空):

  1. 向用户展示已更改的文件
  2. 根据逻辑分组建议暂存内容(例如,“这 3 个文件都与身份验证重构有关”)
  3. 询问用户是要全部暂存,还是选择特定文件
  4. 使用 git add <files> 暂存获准的文件

如果更改已暂存,则继续分析。

第 3 步:分析差异

阅读完整的已暂存差异:

git diff --cached

根据更改确定提交类型:

信号类型
新增文件并带来新功能feat
新增测试文件或测试内容test
修改现有逻辑以修复错误行为fix
不改变行为的结构调整refactor
修改 package.json、tsconfig、CI 配置chore
修改构建器配置build
仅修改 README、文档、注释docs
仅涉及格式、空格、分号style
性能改进perf

根据主要受影响的目录或模块确定范围:

  • src/api/ -> api
  • src/components/auth/ -> auth
  • tests/ -> tests
  • 根目录配置文件 -> 省略范围
  • 多个互不相关的区域 -> 省略范围
第 4 步:检查用户指定的覆盖项

如果用户通过 $ARGUMENTS 提供了参数:

  • 一个词(例如,fix)-> 将其用作提交类型
  • 两个词(例如,refactor api)-> 将其用作类型和范围
  • 其他情况 -> 使用自动检测的值
第 5 步:编写提交消息

格式:type(scope): imperative short description

规则:

  • 标题行最多 72 个字符
  • 使用祈使语气(“add”“fix”“refactor”,而不是“added”“fixes”)
  • 末尾不加句号
  • 正文解释此次更改的原因,而非更改内容(差异中已展示更改内容)
  • 如果更改很小(拼写错误修复、格式调整),则省略正文

示例:

feat(auth): add JWT refresh token rotation

Tokens were expiring mid-session for users with slow connections.
Rotating refresh tokens extends the session without compromising
security, since each refresh token can only be used once.
第 6 步:确认并提交

向用户展示拟定的提交消息,并征求确认。

如果用户确认,运行:

git commit -m "<message>"

然后使用以下命令验证:

git log --oneline -1

显示已提交的哈希和消息。

提示

  • 在完成一个逻辑工作单元后运行,而不是每次更改文件后都运行
  • 如果差异太大,不适合放在一个提交中,请建议拆分为多个提交
  • 对于破坏性更改,在范围后添加 !:feat(api)!: change response format
  • 正文应回答:“如果有人在 6 个月后阅读这条提交记录,能否理解为什么要进行此更改?”

评论

支持 Markdown