🎯 第一步:先记住每个分支的「固定职责」(所有团队通用)

先给每个分支定死"身份",永远不要跨界使用:

分支名 固定角色 代码状态 谁能改?
main/master 【线上生产分支】:永远对应线上正在运行的代码,绝对稳定、可直接上线 100%稳定 只能通过PR合并,禁止直接改
dev/develop 【开发集成分支】:所有新功能、普通bug的汇总分支,下一个版本的开发基准 开发中,基本稳定 所有开发人员通过PR合并
feature/xxx功能名 【功能开发分支】:单个新功能的开发分支 开发中,不稳定 只有你自己改
hotfix/xxxbug名 【线上紧急bug分支】:修复线上正在出的bug 修复中 只有你自己改
bugfix/xxxbug名 【普通bug分支】:修复开发过程中发现的bug(还没上线的bug) 修复中 只有你自己改

📌 第二步:所有常见场景→直接对应分支(按这个来100%不会错)

你现在要做什么事?(场景) 应该切换到哪个分支? 操作步骤(固定流程) 为什么选这个分支?
1. 开始开发一个全新的功能 先切dev → 拉feature/xxx 1. git switch dev
2. git pull origin dev
3. git switch -c feature/登录功能
功能要基于最新的开发基准分支开发,开发完合并回dev
2. 线上出bug了,需要紧急修复(用户现在就能看到的bug) 先切main → 拉hotfix/xxx 1. git switch main
2. git pull origin main
3. git switch -c hotfix/支付失败修复
线上bug必须基于线上正在运行的代码修复,不能带dev里未上线的开发代码!
3. 测试环境发现bug(还没上线,只是开发过程中的bug) 先切dev → 拉bugfix/xxx 1. git switch dev
2. git pull origin dev
3. git switch -c bugfix/列表分页bug
普通bug是开发过程中的问题,基于开发分支修复,修复完合并回dev
4. 把自己开发完的功能,合并到开发分支 先切dev 1. git switch dev
2. git merge feature/登录功能
3. 推远程提PR
只有dev是开发集成分支,所有功能最终都要汇总到dev
5. 线上bug修复完,要上线 先切main 1. 把hotfix分支提PR合并到main
2. 合并完切main拉最新代码部署
main是唯一的上线分支,只有合并到main的代码才能上线
6. 同步别人刚合并到dev的最新代码,继续开发自己的功能 先切dev → 再切回自己的feature分支 1. git switch dev
2. git pull origin dev
3. git switch feature/登录功能
4. git merge dev
先拉dev最新代码,再合并到自己的功能分支,避免后续冲突
7. 把线上刚修复的bug,同步到开发分支dev 先切dev 1. git switch dev
2. git cherry-pick hotfix里的bug修复提交哈希
只把bug修复同步到dev,不要把main的其他代码带过来
8. 查看线上代码是什么样的,排查线上问题 直接切main git switch main && git pull origin main main永远和线上代码一致,看main就是看线上代码
9. 测试同事要测试你开发的功能 切到自己的feature/xxx分支 把feature分支推到远程,测试环境拉这个分支测试 自己的功能分支独立,测试不影响其他开发
10. 版本要上线了,要打版本标签 main 合并完所有要上线的代码到main,在main分支打tag 版本标签永远打在上线分支main上

🌳 第三步:10秒快速决策树(遇到问题按顺序问自己)

1
2
3
4
5
6
7
你现在要做的事:
├─ 是和【线上生产环境】有关的?
│ ├─ 是(修线上bug/上线)→ 基准分支选 main
│ └─ 否(开发新功能/修测试bug)→ 基准分支选 dev
└─ 是自己单独开发/修复吗?
├─ 是 → 从基准分支拉自己的独立分支(feature/hotfix/bugfix)
└─ 否(合并代码/同步代码/打版本)→ 直接切到基准分支操作

⚠️ 最容易踩的3个错误(90%的新手都犯过)

❌ 错误1:从dev分支拉hotfix修复线上bug

→ 后果:把dev里未上线的开发代码带到线上,上线后会出现未知问题!
→ 正确:所有线上bug修复,必须从main分支拉hotfix

❌ 错误2:直接在main/dev分支开发代码

→ 后果:多人同时改同一个分支,冲突爆炸,代码混乱,无法回滚
→ 正确:所有开发/修复,必须拉自己的独立分支,开发完再合并

❌ 错误3:合并代码的时候,从自己的分支合并main/dev

→ 后果:把自己未完成的代码带到主分支,污染主分支
→ 正确:合并永远是**「主分支合并自己的分支」**,不是「自己的分支合并主分支」


💡 总结成一句口诀:
开发功能从dev拉,修线上bug从main拉,所有改动都开独立分支,永远不在主分支直接写代码