前言
团队开发的时候,Git的使用方式很重要
如果每个人都随便提交,代码冲突、版本混乱,会很麻烦
所以总结了一些Git工作流和团队协作的最佳实践
分支管理
主要分支
1 2 3 4 5
| main (或master) ├── develop ├── feature/* ├── release/* └── hotfix/*
|
main分支
主分支,始终保持稳定可发布的状态
develop分支
开发分支,日常开发都在这个分支进行
1 2
| git checkout -b develop main
|
feature分支
功能分支,从develop分出,开发完成后合并回develop
1 2 3 4 5 6 7
| git checkout -b feature/user-login 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
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
| npm install -g commitizen
git cz
|
代码审查
Pull Request流程
1. 创建PR
1 2 3 4
| git push origin feature/user-login
|
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
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 .
git rebase --continue
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
| target/ *.iml .idea/ *.log .DS_Store
git update-index --assume-unchanged filename
git update-index --no-assume-unchanged filename
|
最佳实践
- 频繁提交:小步快跑,每次提交都是完整的功能单元
- 写好Commit Message:清晰描述做了什么
- 代码审查:所有代码都要经过审查
- 保护主分支:设置分支保护,需要PR才能合并
- 自动化测试:提交自动触发CI/CD
- 定期同步:定期拉取远程代码,减少冲突
- 不要提交敏感信息:密码、密钥等不要提交
- 大文件使用LFS:大文件用Git LFS管理
总结
Git用得好,团队协作效率会高很多
关键点:
- 选择合适的工作流
- 规范分支管理
- 写好Commit Message
- 做好代码审查
- 定期同步代码
暂时就先记录这么多