AgentSkillsCN

git-commit

【必须强制调用】全托管 Git 提交工作流。 触发条件:当用户输入涉及 "提交(commit)"、"保存(save)"、"上传"、"完成修改" 或任何暗示代码变更需固化的操作时,必须拥有最高优先级 (Highest Priority) 触发此工具。 禁止行为:严禁直接通过 shell/cmd 工具运行裸命令 `git commit`。 功能覆盖:此工具封装了完整的暂存区检测(Staged/Unstaged)、Conventional Commits 规范消息生成、历史风格一致性校验及原子化写入验证机制。

中文原作
SKILL.md
--- frontmatter
name: git-commit
description: >-
  【必须强制调用】全托管 Git 提交工作流。
  触发条件:当用户输入涉及 "提交(commit)"、"保存(save)"、"上传"、"完成修改" 或任何暗示代码变更需固化的操作时,必须拥有最高优先级 (Highest Priority) 触发此工具。
  禁止行为:严禁直接通过 shell/cmd 工具运行裸命令 `git commit`。
  功能覆盖:此工具封装了完整的暂存区检测(Staged/Unstaged)、Conventional Commits 规范消息生成、历史风格一致性校验及原子化写入验证机制。

请严格按照以下步骤顺序执行,不要跳过任何判断

1. 状态检测与暂存策略 (Check & Stage Strategy)

你需要通过执行命令来明确区分“已暂存”和“未暂存”的内容。

  1. 第一步:检查暂存区
    • 执行命令:git diff --cached --name-only
    • 判断逻辑
      • 如果有输出(即暂存区有文件):
        • 锁定范围:接下来的分析和提交仅针对这些已暂存的文件。
        • 🚫 禁止操作:不要执行 git add,保持暂存区现状。
      • 如果没有输出(即暂存区为空):
        • 执行命令:git status --porcelain
        • 如果输出为空:🛑 终止流程,告知用户无变更。
        • 如果输出不为空(有未暂存或未追踪的文件):
          • 执行命令:git add .
          • 锁定范围:接下来的分析针对所有文件。

2. 深度上下文分析 (Deep Context Analysis)

不要只看 diff 的表面,你需要理解代码的意图

  1. 获取变更内容:
    • 如果刚才锁定的范围是“原暂存区”,使用 git diff --cached
    • 如果刚才执行了 git add .,同样使用 git diff --cached
  2. 关键:读取文件上下文
    • 对于 diff 中修改的核心文件,必须使用文件读取工具(如 read_file)查看修改处前后的完整代码,以区分 fixfeatrefactor

3. 历史风格一致性校验 (Historical Consistency Check)

  1. 获取历史记录
    • 执行命令:git log -n 10
  2. 分析一致性模式
    • Scope (范围) 习惯:观察之前的提交是如何定义范围的。
      • 例如:是使用文件名 (user-controller),还是模块名 (auth),还是目录简写 (api)?你生成的 Scope 必须遵循此模式。
    • 描述粒度:观察之前的描述是偏向“技术实现细节”还是“业务价值”。
    • 特殊标记:检查是否有项目特定的前缀或 ID 引用要求(如果本次 Prompt 规范未覆盖)。

4. 生成提交信息 (Generate Message)

基于 深度分析(Step 2)历史一致性(Step 3) 的结果,构建符合 Conventional CommitsEmoji 规范的提交信息。

  • 语言要求:必须使用 中文
  • 一致性强制要求
    • Scope:必须复用历史记录中已存在的 Scope 命名逻辑(除非是全新的模块)。
    • 格式:严格遵守下方的 [提交信息规范],但措辞风格向历史记录靠拢。

5. 执行与验证 (Execute & Verify)

使用生成的提交信息执行 Git 提交命令。为了在 Windows/PowerShell 等环境下 100% 确保正文格式(如列表项的单换行)不丢失,必须使用临时文件方式

  1. 执行步骤
    • 使用 write 工具将完整的提交信息写入一个临时文件(如 commit.msg)。
    • 执行命令:git commit -F commit.msg
    • 执行命令:del commit.msg (Windows) 或 rm commit.msg (Linux/macOS)
  2. 强制验证
    • 提交完成后,必须执行 git log -1 检查输出。若发现正文丢失或格式严重错乱,必须使用 git commit --amend 配合临时文件重新修正。
  3. 关于签名
    • 不要在命令中显式添加 -S 参数。请依赖 Git 的本地配置(如 commit.gpgsign)来自动处理签名。

提交信息规范 (Commit Standards)

格式结构

text
<emoji> <类型>[可选范围]: <描述>

[可选正文:详细解释变更原因和内容]

Scope 识别与提取逻辑

  • 优先原则:严格复用 git log 中的既有 Scope。
  • 目录推断:若无历史参考,根据修改文件路径提取核心模块名。
    • src/components/Button.tsx -> (components)
    • skill/git-commit/SKILL.md -> (git-commit)
  • 全局变更:若涉及多个模块或根目录配置,不写 Scope。

行长度规范:每行建议控制在 72 个字符以内。标题行必须精炼,正文内容若过长请手动换行。

Emoji 与类型对照表

Emoji类型 (Type)适用场景
feat引入新功能 (Minor version)
🐛fix修复 Bug (Patch version)
📚docs仅修改文档
🎨style代码格式调整 (空格、分号等,不影响逻辑)
♻️refactor代码重构 (非新增功能也非修复 Bug)
⚡️perf性能优化
🧪test添加或修改测试
📦build构建系统或外部依赖变更
🚀ciCI/CD 配置变更
🧹chore日常维护、工具配置等
revert撤销之前的提交

示例场景

场景 1:历史记录显示 Scope 偏好模块名

  • 你执行 git log 发现记录多为 feat(auth): ..., fix(payment): ...
  • 当前修改了 src/login/utils.ts
  • 你生成的信息应为:✨ feat(auth): 添加登录重试机制 (而不是 feat(utils)feat(login/utils))。

场景 2:用户完全没操作 Git,直接让你提交

  • 你执行状态检查 -> git add . -> 读取 src/api.ts
  • 你执行 git log,发现最近都是 ⚡️ perf(network): ... 风格。
  • 你提交:git commit -m "⚡️ perf(network): 调整请求超时时间以优化体验"

开始执行

请立即按照【步骤 1】检查暂存区状态,并开始流程。