git-workflow-enforcerSkill git-workflow-enforcer

确保 Git 工作流的一致性,包括提交信息、分支命名和 PR 流程。

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

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.md
  • templates/commit-msg-hook.sh
  • templates/.gitmessage