分支管理和提交信息规范
分支管理规范
分支类型
主要分支
master/main
- 生产环境分支,稳定可发布的代码develop
- 开发测试分支,用于集成和测试各个功能分支
功能分支
feature/功能名称
- 新功能开发(从master分支创建)- 示例:
feature/user-login
、feature/payment-system
- 示例:
bugfix/问题描述
- Bug修复- 示例:
bugfix/login-error
、bugfix/payment-timeout
- 示例:
hotfix/紧急修复
- 生产环境紧急修复- 示例:
hotfix/security-patch
、hotfix/critical-bug
- 示例:
辅助分支
release/版本号
- 版本发布准备- 示例:
release/v1.2.0
、release/v2.0.0-beta
- 示例:
support/维护版本
- 长期维护分支- 示例:
support/v1.x
、support/legacy
- 示例:
分支命名规范
格式要求
分支类型/简短描述
命名规则
- 使用小写字母和连字符(kebab-case)
- 避免使用下划线或驼峰命名
- 描述要简洁明了,控制在3-5个单词内
- 可以包含issue编号:
feature/123-user-profile
示例
bash
# ✓ 良好的分支名
feature/user-authentication
bugfix/header-layout-issue
hotfix/payment-gateway-error
release/v2.1.0
feature/456-shopping-cart
# ✗ 不推荐的分支名
Feature/UserAuth
user_login_feature
fix-bug
new-feature
very-long-branch-name-that-describes-everything
分支工作流程
1. Feature 分支流程
bash
# 从 master 分支创建功能分支(确保基于稳定版本)
git checkout master
git pull origin master
git checkout -b feature/new-feature
# 开发完成后合并到 develop 分支进行测试
git checkout develop
git pull origin develop
git merge feature/new-feature
git push origin develop
# 功能测试通过后,再合并到 master
# git checkout master
# git merge feature/new-feature
# git push origin master
git branch -d feature/new-feature
2. Bugfix 分支流程
bash
# 从对应分支创建修复分支
git checkout develop # 或受影响的分支
git checkout -b bugfix/issue-description
# 修复完成后合并
git checkout develop
git merge bugfix/issue-description
git push origin develop
3. Hotfix 分支流程
bash
# 从 master 创建热修复分支
git checkout master
git checkout -b hotfix/critical-fix
# 修复完成后同时合并到 master 和 develop
git checkout master
git merge hotfix/critical-fix
git tag v1.2.1
git push origin master --tags
git checkout develop
git merge hotfix/critical-fix
git push origin develop
4. Release 分支流程
bash
# 从 master 创建发布分支(基于稳定版本)
git checkout master
git pull origin master
git checkout -b release/v1.3.0
# 版本号更新、文档完善、最终测试...
# 发布完成后合并回 master 并打标签
git checkout master
git merge release/v1.3.0
git tag v1.3.0
git push origin master --tags
# 同步到 develop 分支
git checkout develop
git merge release/v1.3.0
git push origin develop
git branch -d release/v1.3.0
分支保护规则
Master/Main 分支
- 禁止直接推送
- 要求通过 Pull Request 合并
- 要求代码审查
- 要求通过 CI/CD 检查
- 要求线性历史(rebase merge)
Develop 分支
- 要求通过 Pull Request 合并
- 要求至少一人审查
- 要求通过基本测试
提交信息规范
基本格式
ini
<类型>[可选的作用域]: <描述>
[可选的正文]
[可选的脚注]
提交类型(Type)
主要类型
feat
- 新功能(feature)fix
- 修复bugdocs
- 文档变更style
- 代码格式调整(不影响代码运行)refactor
- 重构(既不是新增功能,也不是修复bug)test
- 添加或修改测试chore
- 构建过程或辅助工具的变动
扩展类型
perf
- 性能优化build
- 构建系统或外部依赖项的更改ci
- CI配置文件和脚本的更改revert
- 回滚之前的提交remove
- 删除功能或文件update
- 更新依赖或配置security
- 安全相关修复
作用域(Scope)
作用域用于指定本次提交影响的范围,可选项包括:
按功能模块
scss
feat(auth): 添加用户登录功能
fix(payment): 修复支付超时问题
docs(api): 更新API文档
按文件类型
scss
style(css): 调整按钮样式
test(unit): 添加用户模块单元测试
build(webpack): 优化打包配置
按组件
scss
feat(header): 添加导航菜单
fix(modal): 修复弹窗关闭问题
refactor(table): 重构表格组件
描述(Description)
规则
- 使用祈使句,现在时态
- 首字母小写
- 结尾不加句号
- 简明扼要,控制在50字符以内
示例
bash
# ✓ 良好的描述
feat: 添加用户注册功能
fix: 修复登录按钮点击无响应
docs: 更新安装说明
style: 统一代码缩进格式
refactor: 优化用户查询逻辑
# ✗ 不推荐的描述
feat: 添加了用户注册功能。
Fix: Login button not working
docs: update README.md file
style: Fix indentation
refactor: 用户查询逻辑优化
正文(Body)
当需要更详细说明时使用,应该说明:
- 为什么做这个变更
- 与之前行为的对比
- 变更的动机
scss
feat(auth): 添加JWT身份验证
为了提高安全性,将原有的session认证替换为JWT认证。
JWT token将存储在localStorage中,有效期为7天。
这样可以支持跨域认证,便于后续微服务架构。
Closes #123
脚注(Footer)
关联Issue
bash
Closes #123
Fixes #456
Resolves #789
Related to #101
破坏性变更
bash
BREAKING CHANGE: 删除了旧的API端点 /api/v1/users
请使用新的端点 /api/v2/users
提交示例
基础示例
bash
feat: 添加用户头像上传功能
fix: 修复图片压缩失败问题
docs: 添加部署指南
style: 格式化代码缩进
refactor: 重构用户服务类
test: 添加用户模块集成测试
chore: 更新依赖包版本
带作用域示例
bash
feat(user): 添加用户资料编辑功能
fix(payment): 修复支付回调处理错误
docs(api): 完善接口文档示例
style(scss): 优化样式文件结构
refactor(auth): 重构认证中间件
test(e2e): 添加端到端测试用例
复杂示例
bash
feat(auth): 实现OAuth2.0社交登录
支持通过微信、QQ、微博进行第三方登录
- 添加OAuth2.0客户端配置
- 实现授权码流程
- 集成用户信息同步
Closes #234
Related to #235, #236
bash
fix(performance): 优化列表查询性能
- 添加数据库索引
- 实现分页查询
- 增加缓存机制
修复了当数据量超过1000条时页面加载缓慢的问题
Fixes #456
Performance improvement: ~70% faster loading
提交频率建议
推荐做法
- 每个逻辑单元提交一次
- 功能开发过程中定期提交
- 确保每次提交都可以正常运行
- 避免包含多个不相关的变更
提交时机
bash
# ✓ 好的提交节奏
feat: 添加用户注册表单
feat: 实现用户注册验证
feat: 集成短信验证码
test: 添加用户注册测试用例
# ✗ 避免的做法
feat: 完整的用户注册功能(包含太多变更)
fix: 各种bug修复(混合多个修复)
工具集成
Git Hooks
bash
# .gitmessage 模板
# <类型>[作用域]: <描述>
#
# [正文]
#
# [脚注]
Commitizen 配置
json
{
"config": {
"commitizen": {
"path": "cz-conventional-changelog"
}
}
}
Commitlint 规则
javascript
module.exports = {
extends: ['@commitlint/config-conventional'],
rules: {
'type-enum': [2, 'always', [
'feat', 'fix', 'docs', 'style', 'refactor',
'test', 'chore', 'perf', 'build', 'ci',
'revert', 'remove', 'update', 'security'
]],
'subject-max-length': [2, 'always', 50],
'subject-case': [2, 'always', 'lower-case']
}
};
最佳实践
分支管理
- 保持分支简洁 - 及时删除已合并的分支
- 定期同步 - 经常从主分支拉取最新代码
- 小步快跑 - 功能分支不要过大,及时合并
- 命名一致 - 团队内统一分支命名规范
提交管理
- 原子性提交 - 每次提交只包含一个逻辑变更
- 有意义的信息 - 让他人能快速理解变更内容
- 测试后提交 - 确保代码可以正常运行
- 及时提交 - 不要积累太多变更才提交
代码审查
- 强制审查 - 所有代码变更都需要经过审查
- 建设性反馈 - 提供具体、可操作的建议
- 及时响应 - 快速处理审查请求
- 学习心态 - 将审查视为学习和改进的机会
通过遵循这些规范,可以让团队协作更加高效,代码历史更加清晰,项目维护更加容易。