🚀 开发团队 Git 提交发布规范

📋 目录


🌳 分支策略

主要分支

🔒 stable 分支(保护分支)

  • 用途:生产环境代码,对外发布的稳定版本
  • 特点
    • 受保护,不允许直接推送
    • 只能通过 Pull Request 合并
    • 每次合并都是一个发布版本
    • 必须经过代码审查

🧪 dev 分支(测试分支)

  • 用途:开发测试环境,集成最新功能
  • 特点
    • 开发人员的主要工作分支
    • 包含最新的开发进度
    • 用于功能测试和集成测试

🔧 功能分支(临时分支)

  • 命名规范feat-YYYYMMDD-功能名
  • 示例
    • feat-20241201-用户登录优化
    • feat-20241201-数据导出功能
    • feat-20241201-bundle优化

🔄 开发流程

1. 开始新功能开发

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1. 切换到 dev 分支
git checkout dev

# 2. 拉取最新代码
git pull origin dev

# 3. 合并 stable 分支(确保基于最新稳定版本)
git merge origin/stable

# 4. 创建功能分支
git checkout -b feat-20241201-新功能名

# 5. 推送功能分支到远程
git push -u origin feat-20241201-新功能名

2. 开发过程中

1
2
3
4
5
6
# 定期提交代码
git add .
git commit -m "feat: 实现用户登录验证逻辑"

# 推送到远程功能分支
git push origin feat-20241201-新功能名

3. 完成小功能后合并到 dev

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1. 切换到 dev 分支
git checkout dev

# 2. 拉取最新代码
git pull origin dev

# 3. 合并功能分支
git merge feat-20241201-新功能名

# 4. 推送到远程 dev
git push origin dev

# 5. 删除本地功能分支(可选)
git branch -d feat-20241201-新功能名

📝 提交规范

Commit Message 格式

1
2
3
4
5
<type>(<scope>): <subject>

<body>

<footer>

Type 类型

类型 描述 示例
feat 新功能 feat: 添加用户登录功能
fix 修复 bug fix: 修复登录页面验证码显示问题
docs 文档更新 docs: 更新 API 文档
style 代码格式调整 style: 统一代码缩进格式
refactor 代码重构 refactor: 重构用户管理模块
perf 性能优化 perf: 优化 bundle 大小
test 测试相关 test: 添加登录功能单元测试
chore 构建/工具相关 chore: 更新 webpack 配置

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
# 好的提交信息 ✅
git commit -m "feat(auth): 添加JWT token验证中间件

- 实现token生成和验证逻辑
- 添加token过期处理
- 集成到登录接口

Closes #123"

# 不好的提交信息 ❌
git commit -m "修改了一些东西"
git commit -m "fix bug"
git commit -m "更新"

👥 多人协作避免冲突

🛡️ 预防冲突策略

1. 保持同步

1
2
3
4
5
# 每天开始工作前
git checkout dev
git pull origin dev
git checkout feat-20241201-我的功能
git merge dev # 将最新的 dev 合并到功能分支

2. 小步快跑

  • 频繁提交:每完成一个小功能就提交
  • 及时推送:避免本地积累太多代码
  • 定期合并:每天至少合并一次到 dev

3. 分工明确

1
2
3
4
5
6
7
8
9
10
# 团队协作建议
📁 前端团队
├── 张三 负责 用户模块 (src/pages/User/)
├── 李四 负责 订单模块 (src/pages/Order/)
└── 王五 负责 公共组件 (src/components/)

📁 后端团队
├── 赵六 负责 用户服务 (services/user/)
├── 钱七 负责 订单服务 (services/order/)
└── 孙八 负责 基础设施 (infrastructure/)

🔧 冲突解决流程

当遇到合并冲突时:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 1. 拉取最新代码
git pull origin dev

# 2. 如果有冲突,Git 会提示
# Auto-merging src/components/Header.tsx
# CONFLICT (content): Merge conflict in src/components/Header.tsx

# 3. 打开冲突文件,查看冲突标记
<<<<<<< HEAD
// 你的代码
const userName = user.name;
=======
// 别人的代码
const userName = user.fullName;
>>>>>>> dev

# 4. 手动解决冲突,保留正确的代码
const userName = user.fullName; // 保留正确的版本

# 5. 标记冲突已解决
git add src/components/Header.tsx

# 6. 完成合并
git commit -m "resolve: 解决用户名显示冲突"

🎯 冲突解决最佳实践

  1. 沟通优先:发现冲突先与相关同事沟通
  2. 理解代码:不要盲目删除别人的代码
  3. 测试验证:解决冲突后务必测试功能
  4. 文档记录:复杂冲突要在提交信息中说明

🚨 紧急修复流程(Hotfix)

场景:生产环境发现严重 bug,需要紧急修复

🔥 紧急修复步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 1. 从 stable 分支创建 hotfix 分支
git checkout stable
git pull origin stable
git checkout -b hotfix-20241201-修复登录bug

# 2. 快速修复 bug
# ... 进行必要的代码修改 ...

# 3. 提交修复
git add .
git commit -m "hotfix: 修复用户登录验证失败问题

- 修复 JWT token 验证逻辑错误
- 添加异常处理机制
- 紧急修复生产环境问题

Fixes #456"

# 4. 推送 hotfix 分支
git push origin hotfix-20241201-修复登录bug

🔄 Hotfix 合并策略

1
2
3
4
5
6
7
8
9
10
11
12
13
# 5. 合并到 stable 分支(生产发布)
git checkout stable
git merge hotfix-20241201-修复登录bug
git push origin stable

# 6. 同步到 dev 分支(避免丢失修复)
git checkout dev
git merge stable
git push origin dev

# 7. 清理 hotfix 分支
git branch -d hotfix-20241201-修复登录bug
git push origin --delete hotfix-20241201-修复登录bug

⚠️ Hotfix 注意事项

  • 🎯 专注修复:只修复当前问题,不添加新功能
  • 快速响应:从发现到修复上线控制在 2 小时内
  • 📞 及时通知:修复完成后通知相关团队成员
  • 📋 文档记录:在项目文档中记录修复过程

🚀 发版流程

📅 定期发版(每周/每两周)

1. 发版前准备

1
2
3
4
5
6
7
8
9
10
11
12
# 1. 确保 dev 分支代码稳定
git checkout dev
git pull origin dev

# 2. 运行完整测试套件
npm run test
npm run e2e
npm run build

# 3. 检查代码质量
npm run lint
npm run type-check

2. 创建发版 PR

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 1. 从 dev 创建发版分支
git checkout -b release-v1.2.0

# 2. 更新版本号
# 修改 package.json 中的 version
# 更新 CHANGELOG.md

# 3. 提交版本更新
git add .
git commit -m "chore: 发布 v1.2.0 版本

新功能:
- 用户登录优化
- 数据导出功能
- Bundle 大小优化

Bug 修复:
- 修复表格排序问题
- 修复移动端适配问题

性能优化:
- 减少 bundle 大小 56%
- 优化首屏加载时间"

# 4. 推送发版分支
git push origin release-v1.2.0

3. Code Review 流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
## 📋 发版 Code Review 检查清单

### 功能检查

- [ ] 所有新功能正常工作
- [ ] 没有破坏现有功能
- [ ] 浏览器兼容性测试通过

### 代码质量

- [ ] 代码符合团队规范
- [ ] 没有明显的性能问题
- [ ] 错误处理完善
- [ ] 注释和文档完整

### 安全检查

- [ ] 没有敏感信息泄露
- [ ] 输入验证完善
- [ ] 权限控制正确

### 测试覆盖

- [ ] 单元测试通过
- [ ] 集成测试通过
- [ ] E2E 测试通过

4. 合并到 stable 并发布

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 1. Review 通过后,合并到 stable
git checkout stable
git merge release-v1.2.0
git push origin stable

# 2. 创建 Git Tag
git tag -a v1.2.0 -m "发布 v1.2.0 版本

主要更新:
- 用户体验优化
- 性能提升 56%
- Bug 修复"

git push origin v1.2.0

# 3. 部署到生产环境
# 触发 CI/CD 流水线或手动部署

# 4. 清理发版分支
git branch -d release-v1.2.0
git push origin --delete release-v1.2.0

💡 最佳实践

🎯 代码提交最佳实践

✅ 好习惯

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1. 提交前检查
git status # 查看修改文件
git diff # 查看具体修改
git add -p # 分块添加修改

# 2. 有意义的提交信息
git commit -m "feat(user): 添加用户头像上传功能

- 支持 jpg, png, gif 格式
- 自动压缩大于 2MB 的图片
- 添加上传进度显示

Closes #123"

# 3. 推送前再次检查
git log --oneline -5 # 查看最近提交
git push origin feat-20241201-头像上传

❌ 避免的坏习惯

1
2
3
4
# 不要这样做
git add . # 盲目添加所有文件
git commit -m "fix" # 无意义的提交信息
git push --force # 强制推送(除非确实需要)

🔍 代码审查最佳实践

审查者指南

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
## 🔍 Code Review 关注点

### 1. 功能正确性

- 代码是否实现了预期功能?
- 边界条件是否处理正确?
- 错误处理是否完善?

### 2. 代码质量

- 代码是否易读易懂?
- 是否遵循团队编码规范?
- 是否有重复代码?

### 3. 性能考虑

- 是否有性能瓶颈?
- 数据库查询是否优化?
- 前端资源是否合理加载?

### 4. 安全性

- 是否有安全漏洞?
- 用户输入是否验证?
- 敏感数据是否保护?

被审查者指南

1
2
3
4
5
6
7
8
## 📝 提交 PR 前检查清单

- [ ] 代码已经自测通过
- [ ] 添加了必要的测试用例
- [ ] 更新了相关文档
- [ ] 提交信息清晰明确
- [ ] 没有调试代码和注释
- [ ] 代码格式化完成

🛠️ 常见问题解决

Q1: 忘记从 stable 合并就开始开发了怎么办?

1
2
3
4
# 解决方案:在功能分支中补充合并
git checkout feat-20241201-我的功能
git merge origin/stable
# 解决可能的冲突后继续开发

Q2: 功能分支太久没合并,与 dev 差异很大?

1
2
3
4
# 解决方案:定期同步 dev 分支
git checkout feat-20241201-我的功能
git merge origin/dev
# 逐步解决冲突,保持分支同步

Q3: 误提交了敏感信息怎么办?

1
2
3
4
5
6
7
# 如果还没推送到远程
git reset --soft HEAD~1 # 撤销最后一次提交
# 修改文件,重新提交

# 如果已经推送到远程
git revert <commit-hash> # 创建一个反向提交
# 或联系管理员处理

Q4: 多人同时修改同一文件怎么避免冲突?

1
2
3
4
5
6
## 🤝 协作策略

1. **提前沟通**:修改共享文件前先在群里说一声
2. **模块化开发**:尽量将功能拆分到不同文件
3. **定期同步**:每天开始工作前先同步最新代码
4. **小步快跑**:频繁提交,避免大批量修改

Q5: 如何回滚已发布的版本?

1
2
3
4
5
6
7
8
# 紧急回滚到上一个版本
git checkout stable
git revert <problematic-commit>
git push origin stable

# 或者回滚到指定版本
git reset --hard <previous-good-commit>
git push --force origin stable # 谨慎使用

📊 工作流程图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
graph TD
A[开始新功能] --> B[切换到 dev 分支]
B --> C[合并 stable 到 dev]
C --> D[创建功能分支 feat-date-name]
D --> E[开发功能]
E --> F[提交代码]
F --> G{功能完成?}
G -->|否| E
G -->|是| H[合并到 dev 分支]
H --> I[删除功能分支]
I --> J{准备发版?}
J -->|否| A
J -->|是| K[创建发版分支]
K --> L[Code Review]
L --> M[合并到 stable]
M --> N[创建 Tag]
N --> O[部署生产环境]
O --> P[发版完成]

Q[紧急修复] --> R[从 stable 创建 hotfix]
R --> S[修复 bug]
S --> T[合并到 stable]
T --> U[同步到 dev]
U --> V[删除 hotfix 分支]

🎉 总结

这套 Git 工作流程的核心理念是:

  1. 🔒 稳定优先:stable 分支始终保持可发布状态
  2. 🧪 持续集成:dev 分支集成最新开发进度
  3. 🚀 快速迭代:功能分支支持并行开发
  4. 🛡️ 风险控制:通过 Code Review 保证代码质量
  5. 📞 团队协作:通过规范和沟通避免冲突

遵循这套规范,我们的团队可以:

  • ✅ 高效协作,减少冲突
  • ✅ 保证代码质量
  • ✅ 快速响应线上问题
  • ✅ 稳定可靠地发布版本

记住:规范是为了更好地协作,不是为了限制创造力。在实际使用中,可以根据团队情况灵活调整!🚀