能力:智能代码提交 (Code Commit)
本技能用于自动化、规范化地将代码变更提交到 git 仓库。
核心原则
- 自动化优先:自动分析变更,智能分组,自动生成提交信息
- 规范提交:严格遵循 Conventional Commits 规范,包含 scope
- 质量保障:提交前自动运行项目的代码质量检查
- 安全可靠:所有自动操作前向用户确认,避免误操作
工作流
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): 新增退款逻辑 | 一次提交只包含一个功能的变更 |
暂存策略:
- 单一功能/模块变更 → 直接全部暂存
- 当所有变更都围绕一个模块或功能时,一次性全部暂存
- 多模块/多类型变更 → 分多次提交
- 检测跨模块变更时,建议拆分为多次提交
- 向用户展示分组方案,确认后再执行分批次暂存
- 混合变更(功能 + 重构) → 必须拆分
- 功能变更(
feat/fix)与代码重构(refactor)必须分开提交
- 功能变更(
暂存命令示例:
# 按模块暂存
git add src/user/ src/models/user.py
# 按类型暂存
git add "*.md" docs/
# 全部暂存(仅限单模块变更)
git add -A
3. 提交前代码检查 (PRE-COMMIT CHECKS)
重要:此步骤在暂存后、提交前执行
按以下优先级顺序运行项目中的质量检查工具:
-
代码格式化 (Format)
- 优先使用项目中已配置的工具(如
npm run format,prettier,black,gofmt) - 检查并自动修复格式问题
- 优先使用项目中已配置的工具(如
-
静态分析 / Lint
- 运行
npm run lint,eslint,pylint,golangci-lint,checkstyle等 - 检查是否存在严重错误(error 级别)
- 运行
-
类型检查 (Type Check)
- 运行
tsc --noEmit,mypy,pyright等
- 运行
-
单元测试 (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 |
| 多个无关模块 | 拆分为多次提交 |
提取规则:
- 优先使用文件路径中第一层目录名
- 常见目录映射:
src/下的直接子目录 → scope - 根目录配置文件 → 使用
deps,config,ci等通用 scope - 无法明确提取时 → 省略 scope(仅在跨模块时省略)
4.3 描述生成(Description)
基于 diff 内容,生成简洁的英文或中文描述(1-50 字符):
- 分析 diff 中新增/修改/删除的关键代码
- 提取变更的核心意图(函数名变更、新增接口、修复逻辑等)
- 组合成
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> # 查看指定文件的变更
Scan to contact