Reading Guide
Git工作流与团队协作最佳实践
用 Git 工作流把个人开发和团队协作习惯串起来,方便后续扩展 Code Review 与发布流程文章。
工程协作线 难度 · beginner Git 协作 DevOps Pull Request
推荐下一篇
Git工作流与团队协作最佳实践 🔀 你将学到
Git核心概念和常用命令 主流Git工作流对比与选择 代码审查与合并策略 解决冲突的技巧 🎯 Git基础回顾 核心概念图解 1 2 3 4 5 6 7 工作区(Working Directory) ↓ git add 暂存区(Staging Area) ↓ git commit 本地仓库(Local Repository) ↓ git push 远程仓库(Remote Repository)
常用命令速查 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 27 28 29 30 31 32 33 34 git init git clone <url> git status git add . git commit -m "message" git push origin main git branch git branch feature-x git checkout feature-x git checkout -b feature-x git merge feature-x git branch -d feature-x git log --oneline --graph git diff git blame <file> git checkout -- <file> git reset HEAD <file> git reset --soft HEAD~1 git reset --hard HEAD~1 git revert <commit> git stash git stash pop git stash list
🔄 主流Git工作流 1. Git Flow 适用于发布周期固定 的项目。
1 2 3 4 5 6 7 8 9 10 main ─────●───────────────●─────────────●──────→ │ ↑ ↑ │ ┌──────────┘ ┌─────────┘ ↓ │ │ develop ──●────●────●────●────●────●────●──────→ │ ↑ │ ↑ │ │ │ │ feature/a ─────●────┘ │ │ │ │ feature/b ───────────────●─────────┘
分支说明 :
main: 生产环境代码develop: 开发主分支feature/*: 功能分支release/*: 发布分支hotfix/*: 紧急修复分支1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 git checkout develop git checkout -b feature/user-login git checkout develop git merge --no-ff feature/user-login git branch -d feature/user-login git checkout -b release/v1.0.0 git checkout main git merge --no-ff release/v1.0.0 git tag -a v1.0.0 -m "Release v1.0.0" git checkout develop git merge --no-ff release/v1.0.0 git branch -d release/v1.0.0
2. GitHub Flow 适用于持续部署 的项目,简单高效。
1 2 3 4 5 6 main ─────●───────●───────●───────●───────→ │ ↑ │ ↑ │ │ │ │ feature ──●───●───┘ │ │ │ │ bugfix ───────────────────●───●───┘
流程 :
从main创建分支 开发并提交 创建Pull Request 代码审查 合并到main并部署 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 git checkout main git pull origin main git checkout -b feature/shopping-cart git add . git commit -m "feat: add shopping cart functionality" git push origin feature/shopping-cart git checkout main git pull origin main git branch -d feature/shopping-cart
3. Trunk-Based Development 适用于高度自动化测试 的团队。
1 2 3 main ─────●───●───●───●───●───●───●───────→ │ │ │ │ │ │ │ 短期分支(小时级别)
特点 :
所有开发者直接向main提交 分支生命周期很短(几小时到1天) 依赖Feature Flag控制功能发布 📝 Commit Message规范 Conventional Commits格式 1 2 3 4 5 <type>(<scope>): <subject> <body> <footer>
Type类型 类型 说明 示例 feat新功能 feat: 添加用户注册功能 fixBug修复 fix: 修复登录验证码失效问题 docs文档更新 docs: 更新API文档 style代码格式 style: 格式化代码 refactor重构 refactor: 重构用户模块 perf性能优化 perf: 优化首页加载速度 test测试 test: 添加单元测试 chore构建/工具 chore: 更新依赖版本
示例 1 2 3 4 5 6 7 8 9 10 11 12 13 git commit -m "feat(auth): 添加JWT token刷新机制 - 实现token自动刷新 - 添加token过期前5分钟自动续期 - 修改登录接口返回refresh_token Closes #123" git commit -m "修改了一些代码" git commit -m "update" git commit -m "fix bug"
🔀 合并策略 1. Merge Commit 1 2 git checkout main git merge --no-ff feature/xxx
1 2 3 A---B---C feature / \ D---E-----------F main (merge commit)
优点 :保留完整历史,可追溯缺点 :历史记录较多
2. Squash Merge 1 2 3 git checkout main git merge --squash feature/xxx git commit -m "feat: add new feature"
1 2 3 A---B---C feature D---E---F main (squash成一个提交)
优点 :历史简洁缺点 :丢失详细提交记录
3. Rebase 1 2 3 4 git checkout feature/xxx git rebase main git checkout main git merge feature/xxx
1 2 3 A---B---C feature (before rebase) D---E---A'---B'---C' main (after rebase + merge)
优点 :线性历史,整洁缺点 :改写历史,需谨慎使用
⚔️ 解决冲突 冲突示例 1 2 3 4 5 <<<<<<< HEAD console.log("这是main分支的代码"); ======= console.log("这是feature分支的代码"); >>>>>>> feature/xxx
解决步骤 1 2 3 4 5 6 7 8 9 10 11 12 13 14 git fetch origin git checkout feature/xxx git rebase origin/main git add <conflicted-file> git rebase --continue git rebase --abort
使用VS Code解决冲突 VS Code提供了直观的冲突解决界面:
Accept Current Change : 保留当前分支修改Accept Incoming Change : 使用合并进来的修改Accept Both Changes : 保留两者Compare Changes : 对比查看差异🛡️ 代码审查最佳实践 PR/MR检查清单 ✅ 代码符合编码规范 ✅ 有足够的测试覆盖 ✅ 没有敏感信息泄露 ✅ 性能影响已评估 ✅ 文档已更新 ✅ Commit message规范 审查者要点 1 2 3 4 5 6 7 8 ## 审查重点 1. **功能正确性** : 代码是否实现了预期功能?2. **代码质量** : 是否遵循设计原则?有无代码异味?3. **安全性** : 是否存在安全漏洞?4. **性能** : 是否有性能问题?5. **可维护性** : 代码是否易于理解和维护?6. **测试** : 测试是否充分?
🚀 实用技巧 1. 交互式Rebase整理提交 1 2 3 4 5 6 7 8 git rebase -i HEAD~3
2. Cherry-pick选择性合并 1 2 3 4 5 git cherry-pick <commit-hash> git cherry-pick <commit1> <commit2>
3. Bisect二分查找Bug 1 2 3 4 5 6 7 8 9 10 11 12 13 14 git bisect start git bisect bad git bisect good v1.0.0 git bisect reset
4. 配置别名提高效率 1 2 3 4 5 6 7 8 9 10 [alias ] st = status co = checkout br = branch cm = commit -m lg = log --oneline --graph --decorate unstage = reset HEAD -- last = log -1 HEAD visual = !gitk
📊 团队协作规范模板 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # Git协作规范 ## 分支命名 - 功能分支: feature/功能名称- 修复分支: fix/问题描述- 热修复: hotfix/问题描述## 提交规范 - 使用Conventional Commits格式- 每个提交应该是原子性的- 禁止提交未完成的代码到主分支## 代码审查 - 所有代码必须经过至少1人审查- 审查通过后才能合并- 合并前需要通过CI检查## 发布流程 1. 创建release分支2. 测试验证3. 合并到main并打tag4. 同步到develop
掌握Git,让团队协作更高效! 🎉