Git工作流与团队协作最佳实践

前言

团队开发的时候,Git的使用方式很重要

如果每个人都随便提交,代码冲突、版本混乱,会很麻烦

所以总结了一些Git工作流和团队协作的最佳实践

分支管理

主要分支

1
2
3
4
5
main (或master)
├── develop
├── feature/*
├── release/*
└── hotfix/*

main分支

主分支,始终保持稳定可发布的状态

1
2
# 保护main分支,禁止直接push
git branch -M main

develop分支

开发分支,日常开发都在这个分支进行

1
2
# 从main创建develop分支
git checkout -b develop main

feature分支

功能分支,从develop分出,开发完成后合并回develop

1
2
3
4
5
6
7
# 创建功能分支
git checkout -b feature/user-login develop

# 开发完成后合并到develop
git checkout develop
git merge feature/user-login
git branch -d feature/user-login

release分支

发布分支,从develop分出,用于发布准备

1
2
3
4
5
6
7
8
9
10
11
# 创建发布分支
git checkout -b release/1.0.0 develop

# 发布完成后合并到main和develop
git checkout main
git merge release/1.0.0

git checkout develop
git merge release/1.0.0

git branch -d release/1.0.0

hotfix分支

紧急修复分支,从main分出,修复后合并到main和develop

1
2
3
4
5
6
7
8
9
10
11
# 创建紧急修复分支
git checkout -b hotfix/critical-bug main

# 修复完成后合并
git checkout main
git merge hotfix/critical-bug

git checkout develop
git merge hotfix/critical-bug

git branch -d hotfix/critical-bug

提交规范

Commit Message格式

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

<body>

<footer>

Type类型

  • feat:新功能
  • fix:修复bug
  • docs:文档更新
  • style:代码格式调整
  • refactor:重构
  • perf:性能优化
  • test:测试相关
  • chore:构建/工具相关

示例

1
2
3
4
5
6
7
feat(user): 添加用户登录功能

- 添加登录接口
- 添加JWT token生成
- 添加登录验证

Closes #123
1
2
3
4
5
# 使用Commitizen工具
npm install -g commitizen

# 提交时自动生成格式化的message
git cz

代码审查

Pull Request流程

1. 创建PR

1
2
3
4
# 推送到远程
git push origin feature/user-login

# 在GitHub/GitLab上创建Pull Request

2. PR描述模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
## 变更说明
简要描述本次变更的内容

## 变更类型
- [ ] 新功能
- [ ] Bug修复
- [ ] 重构
- [ ] 文档更新

## 测试
- [ ] 单元测试通过
- [ ] 手动测试通过

## 相关Issue
Closes #123

## 截图
(如果是UI变更,附上截图)

3. Code Review检查清单

  • 代码符合规范
  • 逻辑正确
  • 没有引入不必要的依赖
  • 有相应的测试
  • 文档已更新
  • 没有敏感信息

工作流选择

Git Flow

适合有固定发布周期的项目

1
2
3
4
5
6
1. 从main创建develop
2. 从develop创建feature分支
3. feature完成后合并到develop
4. 发布时从develop创建release分支
5. release完成后合并到main和develop
6. 紧急修复从main创建hotfix分支

GitHub Flow

适合持续部署的项目

1
2
3
4
5
6
1. 从main创建feature分支
2. 提交变更
3. 创建Pull Request
4. 代码审查
5. 合并到main
6. 立即部署

GitLab Flow

适合环境和部署有严格要求的场景

1
2
3
4
1. 从main创建feature分支
2. 创建Merge Request
3. 合并到main后自动创建环境分支
4. 从环境分支部署到对应环境

团队协作规范

分支命名规范

1
2
3
feature/功能描述
hotfix/问题描述
release/版本号

示例:

1
2
3
feature/user-authentication
hotfix/login-timeout
release/v1.0.0

提交前检查

1
2
3
4
5
6
7
8
9
10
11
# 查看修改状态
git status

# 查看具体修改
git diff

# 暂存文件
git add .

# 提交
git commit -m "feat: 添加用户登录"

定期同步

1
2
3
4
5
# 拉取最新代码
git pull origin develop

# 或者先拉再rebase
git pull --rebase origin develop

解决冲突

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 拉取时发现冲突
git pull origin develop

# 解决冲突
# 编辑冲突文件,解决标记

# 标记冲突已解决
git add .

# 继续rebase
git rebase --continue

# 或者放弃rebase
git rebase --abort

常用命令

查看日志

1
2
3
4
5
6
7
8
# 查看提交历史
git log

# 图形化显示
git log --graph --oneline --all

# 查看某文件的修改历史
git log -p filename

撤销操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 撤销工作区修改
git checkout -- filename

# 撤销暂存区修改
git reset HEAD filename

# 撤销最近一次提交(保留修改)
git reset --soft HEAD~1

# 撤销最近一次提交(不保留修改)
git reset --hard HEAD~1

# 回滚到某个版本
git revert commit-id

暂存功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 暂存当前工作
git stash

# 暂存并添加说明
git stash save "工作一半,切换分支"

# 查看暂存列表
git stash list

# 应用暂存
git stash pop

# 应用并删除暂存
git stash drop

标签管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 创建标签
git tag v1.0.0

# 创建带注释的标签
git tag -a v1.0.0 -m "发布1.0.0版本"

# 推送标签
git push origin v1.0.0

# 推送所有标签
git push origin --tags

# 删除标签
git tag -d v1.0.0
git push origin :refs/tags/v1.0.0

配置优化

Git别名

1
2
3
4
5
6
7
8
9
10
11
# 设置别名
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.lg "log --graph --oneline --all"

# 使用
git co main
git br
git ci -m "message"

忽略文件

1
2
3
4
5
6
7
8
9
10
11
12
# .gitignore
target/
*.iml
.idea/
*.log
.DS_Store

# 临时忽略
git update-index --assume-unchanged filename

# 恢复跟踪
git update-index --no-assume-unchanged filename

最佳实践

  1. 频繁提交:小步快跑,每次提交都是完整的功能单元
  2. 写好Commit Message:清晰描述做了什么
  3. 代码审查:所有代码都要经过审查
  4. 保护主分支:设置分支保护,需要PR才能合并
  5. 自动化测试:提交自动触发CI/CD
  6. 定期同步:定期拉取远程代码,减少冲突
  7. 不要提交敏感信息:密码、密钥等不要提交
  8. 大文件使用LFS:大文件用Git LFS管理

总结

Git用得好,团队协作效率会高很多

关键点:

  • 选择合适的工作流
  • 规范分支管理
  • 写好Commit Message
  • 做好代码审查
  • 定期同步代码

暂时就先记录这么多