Git 工作流执行器
确保提交遵循传统的提交信息、分支命名规范和 PR 模板。在创建提交、分支或 PR 时使用,或者当用户提及 git 工作流时。
使用场景
- 创建提交或分支
- 代码审查或 PR 创建
- 用户提及“git 工作流”、“提交信息”、“分支命名”或“拉取请求”
指南
1. 检测现有约定
检查以下内容:
.github/或.gitlab/模板CONTRIBUTING.md- 现有的提交信息模式
- 分支命名模式
2. 传统提交
格式: type(scope): description
类型:
feat: 新功能fix: 修复错误docs: 文档style: 格式化,缺少分号refactor: 代码重构perf: 性能提升test: 添加测试chore: 维护,依赖项
示例:
feat(auth): 添加 OAuth2 登录支持
fix(api): 在用户端点处理空响应
docs(readme): 更新安装说明
refactor(utils): 简化日期格式化逻辑
3. 分支命名
常见模式:
feature/user-authentication
bugfix/login-error-handling
hotfix/critical-security-patch
release/v1.2.0
chore/update-dependencies
验证:
- 小写字母和连字符
- 以类型为前缀
- 描述性名称
- 如适用,加上问题编号:
feature/123-add-dark-mode
4. 提交信息验证
好的提交:
feat(payments): 集成 Stripe 支付网关
- 添加 Stripe SDK 配置
- 实现支付意图创建
- 添加支付事件的 webhook 处理程序
- 更新支付流程的测试
关闭 #456
检查:
- 主题行 ≤50 个字符
- 正文在 72 个字符处换行
- 主题和正文之间有空行
- 使用祈使语气(“添加”而不是“已添加”)
- 参考问题/工单
5. PR 模板
创建 .github/PULL_REQUEST_TEMPLATE.md:
## 描述
<!-- 这个 PR 做了什么? -->
## 变更类型
- [ ] 错误修复
- [ ] 新功能
- [ ] 重大变更
- [ ] 文档更新
## 测试
<!-- 如何测试的? -->
## 检查列表
- [ ] 代码遵循项目风格指南
- [ ] 自我审查完成
- [ ] 对复杂代码添加注释
- [ ] 文档更新
- [ ] 添加/更新测试
- [ ] 所有测试通过
- [ ] 没有新警告
## 相关问题
关闭 #
6. 提交钩子
预提交:
#!/bin/sh
# .git/hooks/pre-commit
# 运行 linter
npm run lint
# 运行测试
npm test
# 检查敏感数据
if git diff --cached | grep -i "password\|api_key\|secret"; then
echo "错误:检测到可能的敏感数据"
exit 1
fi
提交信息:
#!/bin/sh
# .git/hooks/commit-msg
commit_msg=$(cat "$1")
# 检查传统提交格式
if ! echo "$commit_msg" | grep -qE "^(feat|fix|docs|style|refactor|perf|test|chore)(\(.+\))?: .+"; then
echo "错误:提交信息必须遵循传统提交格式"
echo "示例:feat(auth): 添加登录功能"
exit 1
fi
7. 验证现有提交
检查最近的提交是否遵循模式:
git log --oneline -20 | grep -v "^[a-f0-9]\{7\} (feat|fix|docs|style|refactor|perf|test|chore)"
8. 生成变更日志
从传统提交:
# 使用 standard-version
npx standard-version
# 或手动按类型分组
git log --pretty=format:"%s" | grep "^feat" > features.txt
git log --pretty=format:"%s" | grep "^fix" > fixes.txt
9. 受保护的分支
GitHub 设置:
- 需要 PR 审查
- 需要状态检查
- 需要签名提交
- 限制谁可以推送
- 需要线性历史
10. 最佳实践
- 原子提交:每个提交一个逻辑变更
- 描述性消息:解释为什么,而不是怎么做
- 频繁提交:小而频繁的提交优于大而少的提交
- 清洁历史:合并前压缩/变基
- 签名提交:GPG 签名以确保安全
- 参考问题:链接到跟踪系统
Git 提交模板
创建 .gitmessage:
<type>(<scope>): <subject>
<body>
<footer>
# 类型:feat, fix, docs, style, refactor, perf, test, chore
# 范围:受影响的组件或文件
# 主题:祈使句,小写,无句号,≤50 个字符
# 正文:解释什么和为什么,而不是怎么做,72 个字符处换行
# 页脚:破坏性变更,问题参考
设置为模板:
git config --global commit.template ~/.gitmessage
支持文件
templates/PULL_REQUEST_TEMPLATE.mdtemplates/commit-msg-hook.shtemplates/.gitmessage