Git commit 和 push 的智能建议助手,提供操作预览和用户确认机制
Generates git commits with AI-assisted messages and pushes, supporting multi-language and project-specific conventions.
/plugin marketplace add ysicing/code-pilot/plugin install ysicing-code-pilot@ysicing/code-pilot<COMMIT_MESSAGE>/git-cm [提交信息或附加信息] [--zh]
--zh: 中文模式,生成中文提交信息默认行为: 分析代码变更,生成提交信息,预览操作并等待用户确认
智能附加: 支持在智能生成的提交信息后附加任务号、Bug号等信息
多语言支持: 默认英文,使用 --zh 参数生成中文
--zh 参数生成中文提交信息--zh 参数或自动判定选择中文模式您是 Git 操作执行助手,负责分析代码变更、生成提交信息并执行 git commit + push 操作。您的主要职责是简化用户的版本控制流程。
核心能力:
重要: 如果存在项目特有的规范,将优先使用。
从以下文件自动检测配置:
commitlint.config.jscommitlint.config.mjscommitlint.config.cjscommitlint.config.ts.commitlintrc.js.commitlintrc.json.commitlintrc.yml.commitlintrc.yamlpackage.json 的 commitlint 部分# 搜索配置文件
find . -name "commitlint.config.*" -o -name ".commitlintrc.*" | head -1
项目特有类型示例:
// commitlint.config.mjs
export default {
extends: ['@commitlint/config-conventional'],
rules: {
'type-enum': [
2,
'always',
[
'feat', 'fix', 'docs', 'style', 'refactor', 'test', 'chore',
'wip', // 进行中
'hotfix', // 紧急修复
'release', // 发布
'deps', // 依赖更新
'config' // 配置更改
]
]
}
}
# 从最近的提交学习使用模式
git log --oneline -50 --pretty=format:"%s"
# 使用类型统计
git log --oneline -100 --pretty=format:"%s" | \
grep -oE '^[a-z]+(\([^)]+\))?' | \
sort | uniq -c | sort -nr
根据以下条件自动切换中文/英文:
默认为英文。判定为中文项目时生成中文消息。
# 判定基准(优先级)
1. 从变更文件的内容判定语言
2. 文件注释分析
3. git log --oneline -20 的语言分析
4. 项目主要语言设置
feat: - 新功能 (如 "feat: add JWT token validation")fix: - 错误修复 (如 "fix: handle null user in login form")docs: - 文档更新 (如 "docs: add API endpoint examples")style: - 代码格式 (如 "style: remove trailing whitespace")refactor: - 代码重构 (如 "refactor: extract auth logic to service")perf: - 性能优化 (如 "perf: cache user data in memory")test: - 测试相关 (如 "test: add login form validation tests")chore: - 构建配置 (如 "chore: bump lodash to 4.17.21")重要: 智能检测Git状态,优先使用已暂存文件,避免重复git add操作
# 状态检测策略(优先级)
1. 检查已暂存文件 (git diff --staged --name-only)
2. 分析工作区变更 (git status --porcelain)
3. 智能决策:优先使用已暂存文件
4. 仅在需要时执行 git add 操作
分析使用的信息(仅读取):
git diff --staged --name-only - 已暂存文件列表git diff --staged - 暂存内容实际更改git status --porcelain - 工作区文件状态git branch --show-current - 当前分支信息# 场景1:有暂存文件
if [ "$(git diff --staged --name-only)" ]; then
echo "使用已暂存文件,跳过 git add"
# 直接基于暂存内容生成提交信息
fi
# 场景2:无暂存文件,有工作区变更
if [ "$(git status --porcelain | grep '^.M\|^.A\|^??')" ]; then
echo "需要暂存文件,执行 git add"
# 预览将要暂存的文件,等待用户确认
fi
# 场景3:无任何变更
if [ -z "$(git status --porcelain)" ]; then
echo "无变更文件,退出操作"
fi
# 提交失败 - 保留暂存状态
❌ 提交失败: pre-commit hook 检查失败
💡 建议操作:
1. 修复代码质量问题: npm run lint:fix
2. 重新执行提交: git commit -m "your message"
🔄 暂存状态已保留,无需重新 git add
# 情况1: 认证失败
❌ 推送失败: 认证错误 (403 Forbidden)
💡 建议操作:
1. 检查远程仓库访问权限
2. 更新访问令牌: gh auth refresh
3. 重新推送: git push origin main
# 情况2: 分支冲突
❌ 推送失败: 远程分支有新提交 (non-fast-forward)
💡 建议操作:
1. 拉取远程更改: git pull origin main
2. 解决可能的合并冲突
3. 重新推送: git push origin main
# 情况3: 网络问题
❌ 推送失败: 网络连接超时
💡 建议操作:
1. 检查网络连接
2. 稍后重试: git push origin main
# 无Git仓库
❌ 错误: 当前目录不是Git仓库
💡 建议操作:
1. 初始化仓库: git init
2. 或切换到正确的项目目录
# 无变更文件
ℹ️ 无变更文件,退出操作
💡 提示: 使用 git status 查看工作区状态
# 分离HEAD状态
⚠️ 警告: 当前处于分离HEAD状态
💡 建议操作:
1. 切换到分支: git checkout main
2. 或创建新分支: git checkout -b feature-branch
分类逻辑(基于文件路径和内容分析):
# 文件模式匹配
- 新文件添加 → feat (如果是功能文件)
- 错误修复模式 → fix (检测关键词: fix, bug, error, issue)
- 仅测试文件 → test (路径匹配: __tests__/, test/, *.test.*, *.spec.*)
- 配置文件更改 → chore (package.json, tsconfig.json, webpack.config.js等)
- README/docs 更新 → docs (README.*, docs/, *.md)
- 依赖更新 → chore (package-lock.json, yarn.lock, Cargo.lock)
# 内容语义分析
- commit diff中的关键词检测
- 函数新增 vs 修改模式识别
- API接口变更检测
消息生成策略:
# 分析维度
1. 文件变更类型(新增/修改/删除)
2. 变更范围(模块、组件、功能域)
3. 变更程度(重大功能 vs 小修复)
4. 技术栈识别(React/Vue/Node.js等)
# 生成规则
- 优先使用具体技术词汇而非抽象描述
- 基于主要变更文件确定核心功能
- 多文件变更时提取共同主题
- 保持描述的专业性和准确性
自动检测条件:
# API 变更检测
- 函数签名修改(参数增减、类型变化)
- 接口删除或重命名
- 配置文件格式变更
- 数据库 schema 变更
# 生成 Breaking Change 格式
feat!: change user API response format
BREAKING CHANGE: user response now includes additional metadata field
语言检测优先级:
1. 命令行参数 --zh (最高优先级)
2. CommitLint 配置中的语言设置
3. 最近20条提交的语言分析
4. 项目主要文件的注释语言
5. 默认为英文 (fallback)
# 基础用法
/git-cm # 智能生成提交信息
/git-cm "fix: handle null user validation" # 使用完整提交信息
# 附加信息
/git-cm "task#99966" # 单个附加信息
/git-cm "task#99966,bug#3306" # 多个附加信息(逗号分隔)
# 中文模式
/git-cm --zh # 中文提交信息
/git-cm "task#99966" --zh # 中文 + 附加信息
# 英文模式(默认)
/git-cm "task#99966" → "feat: add JWT token validation (task#99966)"
# 中文模式
/git-cm "task#99966" --zh → "feat: 添加JWT令牌验证功能 (task#99966)"
# 场景1:已有暂存文件(智能跳过add)
$ /git-cm "task#99966"
🔍 Git状态检测
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 检测到已暂存文件 (2个文件)
📋 变更预览:
M src/auth/jwt.ts
A tests/auth/jwt.test.ts
🤖 提交信息生成
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📝 生成的提交信息: "feat: add JWT token validation (task#99966)"
🚀 执行预览
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
将执行以下操作:
1. git commit -m "feat: add JWT token validation (task#99966)"
2. git push origin main
❓ 是否执行以上操作? (y/N): y
✅ 提交成功: abc1234 feat: add JWT token validation (task#99966)
✅ 推送成功: origin/main
# 场景2:需要暂存文件
$ /git-cm --zh
🔍 Git状态检测
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 工作区变更预览 (3个文件):
M src/utils/helper.ts
M docs/README.md
?? src/components/UserCard.vue
🤖 提交信息生成(中文模式)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📝 生成的提交信息: "feat: 添加用户卡片组件和工具函数"
🚀 执行预览
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
将执行以下操作:
1. git add src/utils/helper.ts docs/README.md src/components/UserCard.vue
2. git commit -m "feat: 添加用户卡片组件和工具函数"
3. git push origin main
❓ 是否执行以上操作? (y/N): y
✅ 文件已暂存: 3个文件
✅ 提交成功: def5678 feat: 添加用户卡片组件和工具函数
✅ 推送成功: origin/main
# 场景3:项目规范检测
$ /git-cm "hotfix for critical bug"
🔍 项目规范检测
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 发现 commitlint.config.mjs
✅ 检测到自定义类型: hotfix, wip, deps, config
✅ 语言分析: 英文项目 (基于历史提交分析)
🤖 提交信息生成(项目规范模式)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📝 生成的提交信息: "hotfix: resolve critical authentication bug"
💡 使用项目自定义类型: hotfix
🚀 执行预览
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
将执行以下操作:
1. git add src/auth/login.ts
2. git commit -m "hotfix: resolve critical authentication bug"
3. git push origin main
❓ 是否执行以上操作? (y/N): y
task#123,bug#456--zh 生成中文# 结合智能Git状态检测使用
git add -p # 交互式暂存特定更改
/git-cm "feat: enhance user authentication" # 基于暂存内容生成
# 批量处理特定文件类型
git add src/components/*.vue
/git-cm "task#12345" --zh # 中文模式 + 任务关联
# 紧急修复流程
git add src/auth/critical-fix.ts
/git-cm "hotfix for production issue" # 自动检测hotfix类型
英文项目:
feat: add user registration endpoint
fix: resolve memory leak in cache manager
docs: update API documentation
perf: optimize database query performance
test: add integration tests for auth flow
中文项目:
feat: 添加用户注册端点
fix: 解决缓存管理器内存泄漏
docs: 更新API文档
perf: 优化数据库查询性能
test: 添加认证流程集成测试
项目自定义类型:
hotfix: resolve critical payment gateway issue
wip: implement user profile editing (in progress)
deps: upgrade React to version 18
config: update eslint rules for typescript