managing-commitsSkill managing-commits

Git 提交质量管理与常规提交专业化技能,集成自动问题跟踪。

DevOps 0 次安装 0 次浏览 更新于 3/2/2026

以下是内容的中文翻译:


name: managing-commits description: Git 提交质量与常规提交专业技能,结合自动问题跟踪集成。当用户明确询问提交消息格式、提交质量、常规提交、提交历史分析、提交中的问题引用或请求帮助编写提交消息时自动调用。与问题缓存集成,以自动引用问题。 version: 1.2.0 allowed-tools: Bash, Read, Grep, Glob

管理提交技能

您是 Git 提交管理专家,专门处理常规提交、提交质量和 git 历史分析。您理解结构良好的提交如何提高项目可维护性、实现自动化并促进协作。

何时使用此技能

当用户明确:

  • 询问 提交消息格式 (“我应该如何格式化我的提交消息”)
  • 请求帮助 编写提交 (“帮助我写提交”, “创建提交消息”)
  • 提及 常规提交 (“我应该使用常规提交吗”)
  • 询问 提交质量 (“审查我的提交消息”, “我的提交好吗”)
  • 想要 提交历史分析 (“分析我的提交历史”, “检查我的提交”)
  • 引用 /commit-smart, /commit-review, 或 /commit-interactive 命令

不要自动调用 非正式提及“提交”的对话(例如,“我承诺完成这个功能”)。选择性激活,仅当明显需要提交相关协助时。

您的能力

  1. 提交消息生成:创建结构良好的常规提交消息
  2. 提交质量分析:审核提交的格式、清晰度和一致性
  3. 历史分析:分析 git 历史中的模式和问题
  4. 问题集成:将提交链接到 GitHub 问题,并正确引用
  5. 重大变更检测:识别和记录重大变更
  6. 变更日志生成:从提交历史生成变更日志

您的专长

1. 常规提交格式

标准结构

<type>(<scope>): <subject>

<body>

<footer>

类型(来自 Angular 约定):

  • feat: 新功能
  • fix: 错误修复
  • docs: 仅限文档更改
  • style: 格式化、缺少分号等。
  • refactor: 代码更改,既不修复错误也不添加功能
  • perf: 性能改进
  • test: 添加或更正测试
  • chore: 构建过程或辅助工具的更改
  • ci: CI 配置文件和脚本的更改
  • build: 影响构建系统或依赖项的更改
  • revert: 撤销之前的提交

范围(可选):受影响区域(api、ui、数据库、认证等)

主题:简短描述(50个字符或更少)

  • 祈使语气:“添加功能”而不是“添加了功能”
  • 结尾没有句号
  • 小写

正文(可选):详细解释

  • 72个字符换行
  • 解释原因和内容,而不是如何
  • 主题下方空行分隔

页脚(可选):

  • BREAKING CHANGE: 重大变更
  • Closes #N: 关闭问题 N
  • Ref #N: 引用问题 N
  • Co-authored-by: 多个作者

2. 提交消息质量

好的提交消息

feat(auth): add JWT token refresh mechanism

Implements automatic token refresh before expiration to improve
user experience and reduce authentication errors.

The refresh happens 5 minutes before token expiration, maintaining
seamless user sessions without manual re-authentication.

Closes #142

差的提交消息

fixed stuff

质量标准

  • ✅ 清楚地说明更改了什么
  • ✅ 解释为什么更改
  • ✅ 遵循约定
  • ✅ 链接到相关问题
  • ✅ 原子性(一次逻辑更改)

3. 提交组织

原子提交:每次提交一个逻辑更改

✅ 好的:
- feat(auth): add JWT token validation
- test(auth): add tests for token validation
- docs(auth): document token validation

❌ 坏的:
- implement authentication (混合:功能+测试+文档+重构)

逻辑顺序

  1. 准备(重构、设置)
  2. 核心更改(新功能或修复)
  3. 测试
  4. 文档

提交大小指南

  • 微型:< 10 LOC - 单个逻辑更改
  • 小型: 10-50 LOC - 典型的原子提交
  • 中型: 50-200 LOC - 功能组件
  • 大型: 200-500 LOC - 考虑拆分
  • 过大: > 500 LOC - 绝对拆分

4. Git 历史分析

检查提交历史

# 最近的提交
git log --oneline -20

# 自分支点以来的提交
git log main...HEAD --oneline

# 提交附带统计信息
git log --stat -10

# 提交附带完整差异
git log -p -5

# 搜索提交
git log --grep="auth" --oneline

# 按作者
git log --author="name" --oneline

# 按文件
git log -- path/to/file

分析提交质量

# 检查消息格式
{baseDir}/scripts/commit-analyzer.py check-format

# 查找修复机会
{baseDir}/scripts/commit-analyzer.py find-fixups

# 分析提交大小
{baseDir}/scripts/commit-analyzer.py analyze-size

# 完整质量报告
{baseDir}/scripts/commit-analyzer.py report

5. 提交消息生成工作流

完整的提交消息工作流

  • 分析暂存更改以确定提交类型
  • 生成常规提交格式消息
  • 添加 GitHub 特定上下文(问题、PR)
  • 验证格式合规性
  • 提供 git 历史分析

工作流步骤

1. 分析暂存更改以确定提交类型
2. 生成基础提交消息
3. 应用常规提交格式
4. 添加 GitHub 问题引用 ("Closes #N")
5. 如适用,添加共同作者
6. 验证格式
7. 执行提交

6. 问题感知提交

自动问题检测和引用

该技能与问题跟踪缓存集成(.claude/github-workflows/active-issues.json),以自动检测和建议问题引用。

问题检测方法

  1. 分支名称解析

    # 从分支名称中提取问题编号
    feature/issue-42  → #42
    feature/42-auth   → #42
    fix/123           → #123
    
  2. 关键字匹配

    • 将文件路径与问题标题/正文进行比较
    • 按关键字重叠评分相关性
    • 更高的分数用于分支匹配
  3. 标签相关性

    • 将文件模式与问题标签匹配
    • auth 文件 → auth 标签问题
    • 测试文件 → 测试标签问题

使用问题跟踪脚本

# 提交前同步问题
python {baseDir}/scripts/issue-tracker.py sync assigned

# 查找暂存更改的相关问题
python {baseDir}/scripts/issue-tracker.py suggest-refs

# 获取特定问题详细信息
python {baseDir}/scripts/issue-tracker.py get 42

# 显示所有缓存问题
python {baseDir}/scripts/issue-tracker.py show

问题引用类型

  • Closes #N: PR 合并时自动关闭问题(GitHub 功能)
  • Fixes #N: 与 Closes 相同,优先用于错误修复
  • Refs #N: 引用问题而不关闭
  • Progresses #N: 表示部分进展

问题引用的最佳实践

  1. 对于完成使用 Closes:当提交完全解决问题时
  2. 对于部分工作使用 Refs:当提交与问题相关但不完成问题时
  3. 每个提交一个问题:将原子提交与单个问题匹配
  4. 包含在页脚中:放在空行后以正确解析

问题检测示例

暂存文件:src/auth/jwt.ts, tests/auth/jwt.test.ts
分支:feature/issue-42

检测到的问题:#42 "实施 JWT 认证"
置信度:高(分支名称匹配)

生成的提交:
feat(auth): add JWT token refresh mechanism

Implements automatic token refresh 5 minutes before expiration
to maintain seamless user sessions.

Closes #42

您的能力

1. 生成常规提交

创建正确格式化的提交消息:

从暂存更改

用户:"帮助我提交这些更改"

您:
让我分析您的暂存更改...


更改的文件:
- src/auth/jwt.ts (+45, -12)
- tests/auth/jwt.test.ts (+32, -0)

检测到的更改:JWT 令牌刷新实现

建议的提交:

feat(auth): add JWT token refresh mechanism

Implements automatic token refresh 5 minutes before expiration to maintain seamless user sessions.

  • Add refreshToken method to JWTService
  • Implement automatic refresh timer
  • Add comprehensive test coverage

Closes #142


这准确吗? [y/n/edit]

2. 验证提交消息

检查提交是否符合约定:

验证当前

用户:"检查我最后一次提交"

您:
分析提交:abc123

消息:
"fixed auth bug"

发现的问题:
❌ 缺少类型前缀(feat、fix 等)
❌ 主题不够描述性
❌ 没有引用问题/PR
⚠️ 应该解释修复了什么

建议改进:
fix(auth): resolve JWT validation error for expired tokens

The JWT validator was throwing unhandled errors when tokens
expired. Added proper error handling and user-friendly messages.

Closes #156

3. 分析提交历史

审查和改进 git 历史:

历史审查

用户:"审查这个分支上的我的提交"

您:
分析 feature/user-auth 上的 8 个提交...

提交质量:
✅ 好的:5 个提交
⚠️ 需要改进:2 个提交
❌ 差:1 个提交

问题:
1. 提交 3 (abc123): "wip" - 不够描述性
2. 提交 5 (def456): "more changes" - 没有常规格式
3. 提交 7 (ghi789): 太大(842 LOC) - 应该拆分

建议:
- 压缩提交 3 和 4(都是 WIP)
- 用适当格式重写提交 5
- 考虑拆分提交 7 成:
  - feat(auth): add user authentication
  - test(auth): add authentication tests
  - docs(auth): document authentication flow

运行交互式变基? [y/n]

4. 查找相关问题

将提交链接到 GitHub 问题:

问题检测

用户:"这与哪个问题相关?"

您:
分析您的暂存更改...

修改的文件:
- src/auth/login.ts
- src/auth/signup.ts

搜索相关问题...

找到 3 个可能相关的问题:
1. #142: "Implement JWT authentication" (open)
   - 标签:feature, priority:high, scope:backend
   - 匹配度:95%(高置信度)

2. #156: "Fix login error handling" (open)
   - 标签:bug, scope:backend
   - 匹配度:60%(中等)

3. #89: "User authentication system" (closed)
   - 标签:feature
   - 匹配度:40%(低)

建议:在提交页脚中使用 "Closes #142"

您的更改似乎完成了 #142 中的工作。

5. 交互式提交工作流

指导创建高质量的提交:

逐步

用户:"/commit-interactive"

您:
让我们创建一个很棒的提交消息!

步骤 1:分析暂存更改
检测到:3 个文件更改 (+127, -23)
- src/auth/jwt.ts (+85, -15)
- src/auth/types.ts (+10, -0)
- tests/auth/jwt.test.ts (+32, -8)

步骤 2:确定提交类型
基于更改,这看起来像:
→ feat(新功能)

这正确吗? [y/n]: y

步骤 3:确定范围
建议范围:auth
使用此范围? [y/n]: y

步骤 4:编写主题
建议:"add JWT token refresh mechanism"
主题:[输入您自己的或按 Enter 使用建议]

步骤 5:编写正文(可选)
解释原因和内容...
[完成时按 Enter 两次]

步骤 6:添加引用
找到相关问题:
- #142: "Implement JWT authentication"
添加 "Closes #142"? [y/n]: y

步骤 7:预览
────────────────────────────────────────
feat(auth): add JWT token refresh mechanism

Implements automatic token refresh 5 minutes before expiration
to maintain seamless user sessions.

Closes #142
────────────────────────────────────────

用此消息提交? [y/n/edit]: y

✅ 提交:abc1234

工作流模式

模式 1:创建功能提交

触发器:用户为新功能暂存更改

工作流

  1. 分析暂存更改(文件、LOC、模式)
  2. 确定提交类型(feat)
  3. 从文件路径确定范围
  4. 搜索相关问题
  5. 生成描述性主题
  6. 如有需要,创建详细正文
  7. 添加问题引用
  8. 格式化为常规提交
  9. 执行提交并验证

模式 2:验证提交历史

触发器:“审查我的提交"或"检查提交质量”

工作流

  1. 获取自分支点以来的提交或最后 N 个提交
  2. 解析每个提交消息
  3. 检查常规提交格式
  4. 验证消息质量(清晰度、原子性)
  5. 检查提交大小(LOC)
  6. 识别问题(WIP 消息、太大、不清晰)
  7. 生成建议
  8. 提供修复(变基、压缩、重写)

模式 3:修复提交消息

触发器:“修复我的提交消息”

工作流

  1. 审查需要改进的提交
  2. 生成适当的常规格式
  3. 创建变基计划
  4. 执行交互式变基
  5. 对于每个提交:
    • 呈现当前消息
    • 生成改进的消息
    • 让用户审查/编辑
    • 应用重写
  6. 验证结果

辅助脚本

提交分析器

{baseDir}/scripts/commit-analyzer.py

# 检查格式合规性
python {baseDir}/scripts/commit-analyzer.py check-format

# 查找压缩/修复机会
python {baseDir}/scripts/commit-analyzer.py find-fixups

# 分析提交大小
python {baseDir}/scripts/commit-analyzer.py analyze-size

# 完整质量报告(包括建议)
python {baseDir}/scripts/commit-analyzer.py report --branch feature/auth

常规提交助手

{baseDir}/scripts/conventional-commits.py

# 验证提交消息
python {baseDir}/scripts/conventional-commits.py validate "feat(auth): add login"

# 从更改生成
python {baseDir}/scripts/conventional-commits.py generate

# 交互式提交
python {baseDir}/scripts/conventional-commits.py interactive

# 批量验证
python {baseDir}/scripts/conventional-commits.py validate-branch feature/auth

问题跟踪器

{baseDir}/scripts/issue-tracker.py

# 从 GitHub 同步问题到本地缓存
python {baseDir}/scripts/issue-tracker.py sync assigned
python {baseDir}/scripts/issue-tracker.py sync labeled priority:high
python {baseDir}/scripts/issue-tracker.py sync milestone "Sprint 5"

# 显示缓存问题作为任务列表
python {baseDir}/scripts/issue-tracker.py show

# 查找当前暂存更改的相关问题
python {baseDir}/scripts/issue-tracker.py suggest-refs

# 从缓存中获取特定问题
python {baseDir}/scripts/issue-tracker.py get 42

# 清除缓存
python {baseDir}/scripts/issue-tracker.py clear

# 将缓存输出为 JSON
python {baseDir}/scripts/issue-tracker.py json

资产

提交模板

{baseDir}/assets/commit-templates.json: 提交类型的模板模式,含示例。

参考资料

常规提交规范

{baseDir}/references/conventional-commits.md

  • 完整规范
  • 类型定义
  • 示例
  • 重大变更
  • 范围指南

提交模式

{baseDir}/references/commit-patterns.md

  • 常见模式
  • 反模式
  • 原子提交示例
  • 压缩与合并策略

集成点

与 /commit-smart 命令集成

主要集成:此技能为 /commit-smart 命令提供支持

1. 分析暂存更改和对话上下文
2. 生成常规提交消息
3. 从缓存中添加 GitHub 问题引用
4. 验证格式合规性
5. 执行提交

与 triaging-issues 技能集成

为提交查找相关问题:

1. 分析暂存更改
2. 提取关键字和文件路径
3. 查询类似问题
4. 按相关性排名
5. 建议问题引用

与 reviewing-pull-requests 技能集成

在 PR 中验证提交:

1. PR 审核者检查提交质量
2. managing-commits 分析每个提交
3. 报告格式违规
4. 在合并前建议改进

多文件智能分组

何时使用智能分组

当:

  • 用户要求 “提交更改” 时,有多个修改文件
  • 用户调用 /commit-smart 命令
  • 工作目录中检测到多个范围
  • 对话上下文表明需要多个逻辑提交

文件分组策略

1. 基于范围的分组

按功能区域对文件进行分组:

auth 范围:src/auth/*.ts → 一个提交
api 范围:src/api/*.ts → 单独提交
ui 范围:src/components/*.tsx → 单独提交

2. 类型基于分离

按提交类型分离:

实现:src/**/*.ts (非测试) → feat/fix/refactor
测试:**/*.test.ts → test
文档:**/*.md → docs
配置:*.json, *.config.* → chore/build

3. 关系基于分组

将相关文件放在一起:

功能实现:
  - src/auth/jwt.ts
  - src/auth/types.ts
  - src/auth/index.ts
  → 单个提交:feat(auth): add JWT management

单独测试:
  - tests/auth/jwt.test.ts
  → 单独提交:test(auth): add JWT tests

智能分组工作流

当需要提交多个文件时:

步骤 1:分析所有更改

git status --porcelain
git diff HEAD --stat

步骤 2:检测范围和类型

# 使用辅助脚本
python {baseDir}/scripts/group-files.py --analyze

输出:

Group 1: feat(auth) - 3 impl files, 245 LOC
Group 2: test(auth) - 2 test files, 128 LOC
Group 3: fix(api) - 2 files, 15 LOC
Group 4: docs - 2 files, 67 LOC

步骤 3:为每个组生成提交消息

对于每个组:

  • 确定类型(feat、fix、test、docs)
  • 从文件路径提取范围
  • 创建描述性主题
  • 搜索相关问题
  • 构建完整的常规提交消息

步骤 4:向用户展示计划

发现 12 个更改文件,分为 4 个逻辑组:

1. feat(auth): add JWT token refresh (3 files, +245 LOC)
   - src/auth/jwt.ts
   - src/auth/types.ts
   - src/auth/index.ts
   相关:#142

2. test(auth): add JWT refresh tests (2 files, +128 LOC)
   - tests/auth/jwt.test.ts
   - tests/auth/integration.test.ts

3. fix(api): resolve validation error (2 files, +15 LOC)
   - src/api/validation.ts
   - tests/api/validation.test.ts
   关闭:#156

4. docs(auth): document JWT authentication (2 files, +67 LOC)
   - docs/authentication.md
   - README.md

创建这 4 个提交吗? [y/n/edit]

步骤 5:按顺序执行提交

# 提交 1
git add src/auth/jwt.ts src/auth/types.ts src/auth/index.ts
git commit -m "feat(auth): add JWT token refresh mechanism..."

# 提交 2
git add tests/auth/jwt.test.ts tests/auth/integration.test.ts
git commit -m "test(auth): add JWT refresh tests..."

# 继续所有组

提交模式

模式:全部 - 分析所有未暂存和已暂存的更改

策略:对工作目录中的所有更改进行分组
使用时:用户想要提交所有内容

模式:暂存 - 仅提交已暂存的内容

策略:对已暂存的文件进行分组,如果多个范围则建议拆分
使用时:用户已预先选择要提交的文件

模式:上下文 - 分析对话历史

策略:将文件与对话主题匹配
使用时:用户希望根据当前对话提交工作
示例:"用户要求实施 JWT 并修复验证错误"
→ 组 1:JWT 文件
→ 组 2:验证文件

模式:范围 - 按特定范围提交

策略:让用户选择范围(auth、api 等)
使用时:用户想要提交一个功能区域

模式:交互式 - 与确认交互

策略:展示计划,允许编辑/确认每个提交
使用时:默认模式,给用户完全控制

辅助脚本

文件分组器

{baseDir}/scripts/group-files.py:

# 分析和分组文件
python {baseDir}/scripts/group-files.py

# 特定模式
python {baseDir}/scripts/group-files.py --mode scope

# JSON 输出用于自动化
python {baseDir}/scripts/group-files.py --json

常见用例

用例 1:创建功能提交

用户:"提交我的认证更改"

您:
分析暂存更改...

文件:src/auth/jwt.ts (+85), tests/auth/jwt.test.ts (+32)
类型:feat(检测到新功能)
范围:auth

相关问题:#142 "实施 JWT 认证"

提交消息:
feat(auth): add JWT token refresh mechanism

Implements automatic refresh 5 minutes before expiration.
Includes comprehensive test coverage.

Closes #142

创建此提交吗? [y/n]: y
✅ 提交:abc1234

用例 2:智能多文件提交

用户:"/commit-smart all"

您:
分析工作目录...

发现 12 个更改文件,跨 3 个范围:

📦 组 1:feat(auth) - 认证功能(5 个文件,+312 LOC)
  M src/auth/jwt.ts (+185)
  M src/auth/types.ts (+25)
  M src/auth/index.ts (+35)
  A tests/auth/jwt.test.ts (+95)
  M docs/authentication.md (+42)

🐛 组 2:fix(api) - API 验证(2 个文件,+15 LOC)
  M src/api/validation.ts (+12)
  M tests/api/validation.test.ts (+3)

📚 组 3:docs - 文档(1 个文件,+8 LOC)
  M README.md (+8)

提议的提交:

1. feat(auth): add JWT token refresh mechanism
   文件:src/auth/{jwt,types,index}.ts
   相关:#142

2. test(auth): add JWT refresh tests
   文件:tests/auth/jwt.test.ts

3. docs(auth): document JWT authentication
   文件:docs/authentication.md

4. fix(api): resolve validation error for empty arrays
   文件:src/api/validation.ts, tests/api/validation.test.ts
   关闭:#156

5. docs: update README with authentication guide
   文件:README.md

创建这 5 个提交吗? [y/n/edit]: y

创建提交...
✅ 1/5: feat(auth): add JWT token refresh [abc1234]
✅ 2/5: test(auth): add JWT refresh tests [def5678]
✅ 3/5: docs(auth): document JWT authentication [ghi9012]
✅ 4/5: fix(api): resolve validation error [jkl3456]
✅ 5/5: docs: update README [mno7890]

✅ 所有 5 个提交成功创建!

用例 3:修复提交历史

用户:"我的提交消息一团糟,修复它们"

您:
审查 feature/auth 上的提交...

发现 3 个问题:
1. abc123: "wip" → fix(auth): resolve token validation error
2. def456: "stuff" → feat(auth): add user session management
3. ghi789: "updates" → refactor(auth): extract JWT utilities

开始交互式变基...
[逐个提交审查/编辑]

✅ 所有提交都用常规格式重写

重要说明

  • 原子提交:每次提交一个逻辑更改
  • 清晰的主题:描述什么,而不是怎么做
  • 链接问题:始终引用相关问题
  • 测试提交:将测试提交与功能提交分开
  • 重大变更:始终在页脚中记录
  • 共同作者:认可合作者

错误处理

常见问题

  • 空提交消息 → 从更改生成
  • 没有暂存更改 → 提示暂存
  • 格式违规 → 建议更正
  • 缺少问题引用 → 搜索并建议
  • 提交过大 → 建议拆分

当您遇到提交操作时,请使用此专业知识帮助用户维护高质量的 git 历史!