返回 Skill 列表
extension
分类: 开发与工程无需 API Key

code-commit

code-commit

person作者: segemehubModelScope

能力:智能代码提交 (Code Commit)

本技能用于自动化、规范化地将代码变更提交到 git 仓库。

核心原则

  1. 自动化优先:自动分析变更,智能分组,自动生成提交信息
  2. 规范提交:严格遵循 Conventional Commits 规范,包含 scope
  3. 质量保障:提交前自动运行项目的代码质量检查
  4. 安全可靠:所有自动操作前向用户确认,避免误操作

工作流

0. 意图识别

提交模式触发条件(默认行为):

  • "提交代码"、"commit"、"帮我提交"
  • "提交这些改动"、"保存变更"

1. 获取变更上下文 (FETCH CONTEXT)

执行命令获取当前工作区状态:

# 查看整体状态
git status

# 查看未暂存变更
git diff

# 查看已暂存变更
git diff --staged

# 如果是首次提交,也查看未跟踪文件
git status --short

分析输出并记录:

  • 哪些文件已修改、已新增、已删除
  • 变更涉及的模块/目录
  • 变更的代码行数规模

2. 智能分组暂存 (SMART STAGING)

根据变更的文件特征,按模块或文件类型进行分组暂存

| 分组依据 | 示例分组 | 适用场景 | | :----------------- | :------------------------------------ | :------------------------------------- | | 按目录/模块 | feat(user), fix(auth) | 大型项目,多模块独立变更 | | 按文件类型 | chore(deps), style(ui) | 变更集中在某种类型(配置、样式、文档) | | 按功能聚合 | feat(pay): 新增退款逻辑 | 一次提交只包含一个功能的变更 |

暂存策略:

  1. 单一功能/模块变更 → 直接全部暂存
    • 当所有变更都围绕一个模块或功能时,一次性全部暂存
  2. 多模块/多类型变更 → 分多次提交
    • 检测跨模块变更时,建议拆分为多次提交
    • 向用户展示分组方案,确认后再执行分批次暂存
  3. 混合变更(功能 + 重构) → 必须拆分
    • 功能变更(feat/fix)与代码重构(refactor)必须分开提交

暂存命令示例:

# 按模块暂存
git add src/user/ src/models/user.py

# 按类型暂存
git add "*.md" docs/

# 全部暂存(仅限单模块变更)
git add -A

3. 提交前代码检查 (PRE-COMMIT CHECKS)

重要:此步骤在暂存后、提交前执行

按以下优先级顺序运行项目中的质量检查工具:

  1. 代码格式化 (Format)

    • 优先使用项目中已配置的工具(如 npm run format, prettier, black, gofmt
    • 检查并自动修复格式问题
  2. 静态分析 / Lint

    • 运行 npm run lint, eslint, pylint, golangci-lint, checkstyle
    • 检查是否存在严重错误(error 级别)
  3. 类型检查 (Type Check)

    • 运行 tsc --noEmit, mypy, pyright
  4. 单元测试 (Test)

    • 运行 npm test, pytest, go test

检查执行策略:

| 检查结果 | 行为 | | :------------------- | :----------------------------------------------------------- | | 全部通过 | 继续提交流程 | | 仅 warning | 继续提交,并告知用户存在警告 | | 存在 error | 暂停提交,展示错误详情,询问用户是否继续 | | 项目中无检查工具 | 跳过此步骤,记录日志("项目未配置代码检查工具") | | 检查命令执行失败 | 暂停提交流程,提示用户手动处理 |

执行命令示例:

npm run lint && npm run format && npm run typecheck
# 或
make lint
# 或
./scripts/check.sh

4. 生成 Commit Message (GENERATE MESSAGE)

根据暂存的变更,自动生成符合 Conventional Commits 规范的提交信息。

4.1 类型推断(Type)

根据变更内容推断最合适的类型:

| 类型 | 说明 | 示例 | | :----------- | :----------------------------------------- | :------------------------------------------------ | | feat | 新功能 | 新增接口、新功能模块 | | fix | Bug 修复 | 修复崩溃、逻辑错误 | | docs | 文档变更 | README 更新、注释补充 | | style | 代码格式变更(不影响功能) | 空格、缩进、格式化 | | refactor | 代码重构(非新功能,非修复) | 函数拆分、重命名、模块重组 | | perf | 性能优化 | 算法优化、减少不必要的计算 | | test | 新增或修改测试 | 单元测试、集成测试 | | chore | 构建/工具/依赖等辅助性变更 | pom.xml、package.json、CI 配置 | | build | 构建系统或外部依赖的变更 | webpack 配置、makefile | | ci | CI 配置文件或脚本变更 | .github/workflows/、Jenkinsfile |

4.2 Scope 推断(Scope)

从变更的文件路径中提取模块/组件名称作为 scope:

| 变更文件 | 推断 scope | | :---------------------------------------- | :---------- | | src/user/*.py, src/user/ 下多个文件 | user | | src/auth/login.go, src/auth/ | auth | | package.json, pom.xml, .eslintrc | deps 或省略 | | docs/README.md, docs/ | docs | | 多个无关模块 | 拆分为多次提交 |

提取规则:

  1. 优先使用文件路径中第一层目录名
  2. 常见目录映射:src/ 下的直接子目录 → scope
  3. 根目录配置文件 → 使用 deps, config, ci 等通用 scope
  4. 无法明确提取时 → 省略 scope(仅在跨模块时省略)

4.3 描述生成(Description)

基于 diff 内容,生成简洁的英文或中文描述(1-50 字符):

  1. 分析 diff 中新增/修改/删除的关键代码
  2. 提取变更的核心意图(函数名变更、新增接口、修复逻辑等)
  3. 组合type(scope): description 格式

示例输出:

feat(user): 添加用户角色管理接口
fix(auth): 修复登录态过期不刷新的问题
refactor(payment): 重构支付回调逻辑
chore(deps): 升级 axios 到 1.6.0
docs(readme): 补充快速开始指南
style(ui): 统一按钮样式格式
test(user): 新增用户注册单元测试
perf(api): 优化列表查询缓存策略

4.4 Body(可选)

当变更较复杂时生成 body 部分:

  • 说明变更的背景和动机
  • 说明具体的变更内容
  • 说明任何破坏性变更(BREAKING CHANGE)

5. 用户确认 (REVIEW & CONFIRM)

在正式提交前,必须向用户展示完整的提交方案:

=== 提交方案 ===

📦 分组 1
  暂存文件:
    - src/user/user.py (+45, -12)
    - src/user/api.py (+30, -5)
    - tests/test_user.py (+20, -0)
  
  提交信息: feat(user): 添加用户角色管理接口
  
  Body:
  - 新增 UserRole 模型
  - 新增 GET /users/{id}/roles 接口
  - 新增相应用例测试

等待用户确认:

  • 用户可修改暂存分组
  • 用户可修改提交信息
  • 用户要求拆分或合并分组

6. 执行提交 (COMMIT)

用户确认后执行提交:

git commit -m "feat(user): 添加用户角色管理接口" -m "Body 内容"

提交成功后展示:

✅ 提交成功
Commit: abc1234 feat(user): 添加用户角色管理接口
Files: 3 files changed, 95 insertions(+), 17 deletions(-)

7. 推送(可选)

询问用户是否需要推送到远程:

git push origin <current-branch>

特殊情况处理

合并提交 (Merge Commit)

Merge branch 'feature/user-auth' into develop

修复提交 (Amend)

仅在用户明确要求时使用 git commit --amend

分步提交 (Partial Commit)

git add -p

逐块选择变更块进行暂存,适合精细控制提交内容。

跳过检查 (Skip Checks)

当用户明确要求跳过检查时(如 "跳过检查提交"),可以跳过步骤 3(提交前检查),但仍需生成提交信息并经用户确认后提交。


辅助命令参考

git log --oneline -5       # 查看最近5条提交记录(帮助判断提交风格)
git diff --stat            # 查看变更统计
git show HEAD              # 查看上一次提交
git diff <file>            # 查看指定文件的变更