Git 工作流:团队协作的最佳实践指南
前言
Git 是每个程序员都必须掌握的工具,但很多团队用着用着就乱了:分支满天飞、提交记录看不懂、合并冲突天天有。本文介绍一套简单实用的 Git 工作流,让团队协作井井有条。
一、分支模型
推荐使用简化版的 Git Flow,核心分支只有两个:
- main / master:主分支,永远是可发布状态
- develop:开发分支,日常开发都在这上面
临时分支:
- feature/xxx:功能分支,从 develop 拉出来
- bugfix/xxx:修复分支,从 develop 拉出来
- release/xxx:发布分支,从 develop 拉出来准备上线
- hotfix/xxx:紧急修复分支,从 main 拉出来修线上 bug
二、日常开发流程
1. 拉最新代码
git checkout develop
git pull origin develop
2. 创建功能分支
git checkout -b feature/user-login
3. 开发并提交
# 写代码...
# 添加文件
git add .
# 提交(commit message 要清晰)
git commit -m "feat: 添加用户登录页面"
commit message 规范:
feat:新功能fix:修复 bugdocs:文档修改style:代码格式调整refactor:重构chore:构建流程或工具变动
4. 推送到远程
git push origin feature/user-login
5. 发起 Pull Request / Merge Request
在 Git 平台(GitHub/GitLab/Gitee)上发起 PR,把 feature 分支合并到 develop 分支。
6. 代码评审
同事 review 代码,提出修改意见,修改后再合并。
7. 合并后删除分支
git checkout develop
git pull origin develop
git branch -d feature/user-login
git push origin --delete feature/user-login
三、发布流程
1. 从 develop 拉发布分支
git checkout -b release/1.2.0
2. 修复小问题,准备发布
在发布分支上只做 bug 修复,不加新功能。
3. 合并到 main,打 tag
git checkout main
git merge release/1.2.0
git tag -a v1.2.0 -m "版本 1.2.0"
git push origin main --tags
4. 合并回 develop
git checkout develop
git merge release/1.2.0
git push origin develop
四、线上紧急修复
1. 从 main 拉 hotfix 分支
git checkout main
git pull origin main
git checkout -b hotfix/login-bug
2. 修复 bug,合并回 main 和 develop
# 修复...
git checkout main
git merge hotfix/login-bug
git tag -a v1.2.1 -m "修复登录 bug"
git push origin main --tags
# 合并回 develop
git checkout develop
git merge hotfix/login-bug
git push origin develop
五、实用技巧
1. 撤销提交
# 撤销最近一次提交,保留代码改动
git reset --soft HEAD~1
# 撤销最近一次提交,丢弃代码改动(慎用)
git reset --hard HEAD~1
2. 暂存当前工作
# 临时保存当前工作
git stash
# 恢复
git stash pop
3. 查看历史
# 简洁的图形化提交历史
git log --oneline --graph --all
4. 变基保持提交干净
# 把 feature 分支的提交变基到最新的 develop 上
git checkout feature/user-login
git rebase develop
六、常见坑
- 不要在 main 上直接开发:所有改动都要通过 PR 合并
- commit 不要太大:一个功能一个 commit,方便回滚
- 不要 force push 到公共分支:会搞乱别人的代码
- 定期同步 develop:每天至少 pull 一次最新代码
总结
Git 工作流的核心思路:
- main 永远可发布,develop 是集成分支
- 功能分支从 develop 拉,修完合并回 develop
- 发布时从 develop 拉 release,合并到 main 打 tag
- 线上 bug 从 main 拉 hotfix,修完合并回 main 和 develop
这套流程简单实用,小团队用起来刚刚好。