前言 Git 是现代软件开发的必备技能,而分支管理 是 Git 的灵魂。无论是个人项目还是团队协作,合理的分支策略能让开发流程井井有条。本文聚焦于 Git 分支的实战操作与团队协作工作流。
为什么需要分支? 分支让你可以在不影响主线代码的情况下 进行功能开发、Bug 修复或实验。每个人在自己的分支上工作,完成后合并回主线。
一、分支基础操作 1.1 查看分支 1 2 3 4 5 git branch git branch -a git branch -v git branch --merged git branch --no-merged
1.2 创建与切换分支 1 2 3 4 5 6 7 8 git branch feature-login git checkout feature-login git checkout -b feature-payment git switch -c feature-payment
1.3 删除分支 1 2 3 4 5 git branch -d feature-login git branch -D feature-login git push origin --delete feature-login
1.4 重命名分支 1 2 git branch -m old-name new-name git branch -m old-name new-name
二、合并策略:Merge vs Rebase 这是 Git 中最需要理解的概念之一。
2.1 git merge — 合并分支 1 2 3 git checkout main git merge feature-login
效果 :生成一个新的”合并提交”(merge commit),保留完整历史。
1 2 3 main: A---B---C---M (merge commit) / feature: D---E---
适用场景 :合并功能分支到公共分支,保留完整上下文。
2.2 git rebase — 变基 1 2 3 git checkout feature-login git rebase main
效果 :重写历史,让提交历史变成一条直线。
1 2 3 4 5 6 7 # rebase 前 main: A---B---C feature: D---E # rebase 后 main: A---B---C feature: D'---E'
⚠️ 黄金法则:永远不要 rebase 已经推送到远程的公共分支!
2.3 什么时候用哪个?
场景
推荐
原因
合并 feature → main
merge
保留历史,明确追溯
同步 main 最新代码到 feature
rebase
保持 feature 历史整洁
整理本地提交记录
rebase -i
压缩、重排提交
Pull 远程代码
pull --rebase
避免无意义的 merge commit
2.4 交互式 rebase — 清理提交历史
进入编辑界面后:
1 2 3 4 5 6 7 8 9 pick a1b2c3d 添加登录功能 pick e4f5g6h 修复登录页样式 pick i7j8k9l 修复登录逻辑 bug # 可以改为: pick a1b2c3d 添加登录功能 squash e4f5g6h 修复登录页样式 # 合并到上一个提交 squash i7j8k9l 修复登录逻辑 bug # 合并到上一个提交 # 最终只保留一个干净的提交
常用命令 :
命令
含义
pick
保留该提交
squash
合并到上一个提交,保留 commit message
fixup
合并到上一个提交,丢弃 commit message
drop
删除该提交
reword
修改 commit message
三、解决冲突 当两个分支修改了同一文件的同一行时,合并会产生冲突。
3.1 冲突示例 1 2 3 4 git checkout main git merge feature-login
3.2 手动解决冲突 Git 会在冲突文件中标记:
1 2 3 4 5 <<<<<<< HEAD console.log("main 分支的代码"); ======= console.log("feature 分支的代码"); >>>>>>> feature-login
手动编辑文件,保留需要的内容,删除标记:
1 console.log("合并后的最终代码");
1 2 git add src/app.js git commit
3.3 使用工具
3.4 中止合并/变基 1 2 git merge --abort git rebase --abort
四、实用分支操作 4.1 cherry-pick — 挑选提交 将某个提交”摘”到当前分支:
1 2 3 git checkout main git cherry-pick a1b2c3d
场景 :紧急修复了一个 bug,需要同时应用到多个版本分支。
4.2 stash — 暂存修改 切换分支时如果当前有未提交的修改:
1 2 3 4 5 6 7 8 9 10 git stash git checkout other-branch git checkout original-branch git stash pop git stash list git stash apply stash@{1} git stash drop stash@{1} git stash save "描述信息"
4.3 reflog — 救命稻草 即使误删了分支或提交,reflog 也能找回来:
1 2 3 4 5 6 git reflog git reset --hard HEAD@{1}
4.4 reset vs revert 1 2 3 4 5 6 7 git reset --soft HEAD~1 git reset --mixed HEAD~1 git reset --hard HEAD~1 git revert a1b2c3d
五、团队协作工作流 5.1 GitHub Flow(最流行) 1 2 3 4 main ─────────────────────────●──●── (随时可部署) \ / feature ●──●──●──●──●──●── ↖ PR Review → Merge
规则 :
main 分支始终可部署
任何新工作从 main 创建 feature 分支
完成后发起 Pull Request
Code Review 通过后合并到 main
合并后立即部署
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 git checkout main git pull origin main git checkout -b feature/user-profile git add . git commit -m "添加用户个人资料页" git push origin feature/user-profile
5.2 Git Flow(适合有版本发布的项目) 1 2 3 4 5 6 7 8 9 main ●──────●────────────────●──── (生产版本) \ / / release ●──● (发布分支) \ \ / develop ●──●──●──●──●──● (开发主线) \ feature ●──●──● (功能分支) \ hotfix ●──● (紧急修复)
分支类型 :
分支
用途
从哪创建
合并到哪
main
生产环境代码
—
—
develop
开发主线
main
—
feature/*
新功能开发
develop
develop
release/*
发布准备
develop
main + develop
hotfix/*
紧急修复
main
main + develop
5.3 Trunk-Based Development(主干开发) 适合持续集成成熟的团队:
1 2 3 main ●──●──●──●──●──●──●── (所有开发直接在 main 上) \ \ \ \ ● ● ● ● (极短生命周期的分支)
特点 :分支存活不超过 1-2 天,通过 Feature Flag 控制新功能上线。
六、Pull Request 最佳实践 6.1 PR 标题规范 1 2 3 <类型>: <简短描述> 类型:feat / fix / docs / refactor / test / chore
6.2 PR 描述模板 1 2 3 4 5 6 7 8 9 10 11 12 13 ## 变更说明 简要描述做了什么改动 ## 变更类型 - [ ] 新功能 (feat)- [ ] Bug 修复 (fix)- [ ] 重构 (refactor)## 测试 - [ ] 单元测试通过- [ ] 手动测试通过## 截图(如涉及 UI 变更)
6.3 Code Review 关注点
逻辑是否正确
是否有潜在的性能问题
是否遵循项目编码规范
是否有足够的测试覆盖
是否有安全风险
七、常见场景速查 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 35 git reset --soft HEAD~1 git commit --amend -m "新的提交信息" git checkout -b feature-new git rebase -i HEAD~n git checkout feature git rebase main git checkout . git clean -fd git show a1b2c3d git show a1b2c3d --stat git blame src/app.js -L 10,20 git diff main..feature git stash git stash pop
八、Git 配置优化 1 2 3 4 5 6 7 8 9 10 11 12 13 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 --oneline --graph --all --decorate" git config --global alias.undo "reset --soft HEAD~1" git config --global pull.rebase true git config --global init.defaultBranch main
结语 Git 分支管理的关键不在于记住所有命令,而在于理解工作流 和团队规范 。建议:
个人项目用 GitHub Flow ,简单高效
有版本发布周期的项目用 Git Flow
团队统一一种工作流,写入团队文档
遇到问题先 git status 看看当前状态
不确定的操作先 git branch 备份一下
掌握分支管理,你就掌握了 Git 的灵魂。🔀