前言:为什么分支如此重要?
在现代软件开发中,分支(Branch) 是 Git 最强大的特性之一。想象一下:
- 🚀 你可以在不影响主代码的情况下开发新功能
- 🐛 你可以独立修复紧急 Bug
- 🧪 你可以安全地尝试实验性想法
- 👥 团队成员可以并行工作而不互相干扰
这一切都归功于 git branch 命令。本文将带你从零开始,全面掌握 Git 分支管理的核心技能。
一、分支的本质:理解 Git 分支模型
在深入命令之前,先理解分支的本质:
┌─────────────────────────────────────────────────┐
│ Git 分支 = 指向提交的轻量级指针 │
│ │
│ main ──→ ● ──→ ● ──→ ● (最新提交) │
│ ↘ │
│ feature ──→ ● ──→ ● (独立开发线) │
└─────────────────────────────────────────────────┘
关键概念:
- 分支只是一个指向特定提交的指针
- 创建分支几乎零成本(只创建指针,不复制文件)
HEAD指针指向当前所在的分支
二、git branch 基础命令详解
2.1 查看分支
# 查看本地所有分支
git branch
# 查看当前分支(带*标记)
git branch
# * main
# feature-login
# bugfix-123
输出说明:
*表示当前所在分支- 绿色分支表示已与远程同步
- 红色分支表示与远程有差异
# 查看所有分支(包括远程)
git branch -a
# 仅查看远程分支
git branch -r
# 查看分支详细信息(含最后提交)
git branch -v
# 查看分支的上下游关系
git branch -vv
2.2 创建分支
# 基于当前提交创建新分支
git branch feature-user-auth
# 基于特定提交创建分支
git branch hotfix-001 abc1234
# 基于远程分支创建本地分支
git branch feature-x origin/feature-x
⚠️ 注意:git branch 只创建分支,不会切换到新分支!
2.3 切换分支
# 传统方式(Git 2.23 之前)
git checkout feature-user-auth
# 新版推荐方式(Git 2.23+)
git switch feature-user-auth
💡 最佳实践:推荐使用 git switch,语义更清晰,专为分支切换设计。
2.4 创建并切换(一步到位)
# 传统方式
git checkout -b feature-payment
# 新版方式
git switch -c feature-payment
这是最常用的命令组合,开发新功能时首选!
三、分支删除:安全清理
3.1 安全删除(推荐)
# 删除已合并的分支
git branch -d feature-completed
# 输出示例:
# Deleted branch feature-completed (was abc1234).
✅ 安全机制:如果分支未合并,Git 会阻止删除并提示警告。
3.2 强制删除(谨慎使用)
# 强制删除未合并分支
git branch -D feature-abandoned
# ⚠️ 警告:未合并的提交将丢失!
使用场景:
- 实验分支已确认废弃
- 分支代码已备份到其他位置
- 确定不需要该分支的任何更改
3.3 批量删除分支
# 删除所有已合并到 main 的分支
git branch --merged main | grep -v "^\*\|main" | xargs git branch -d
# 删除所有已合并到当前分支的分支
git branch --merged | grep -v "^\*" | xargs git branch -d
四、分支重命名:保持整洁
# 重命名当前分支
git branch -m old-name new-name
# 重命名指定分支
git branch -m feature-login feature-user-authentication
# 如果新名称已存在,强制重命名
git branch -M old-name new-name
常见场景:
- 分支命名不规范需要修正
- 功能范围变化需要更新名称
- 遵循团队命名规范
五、分支合并:整合代码
虽然 git merge 是独立命令,但与 branch 密切相关:
# 切换到目标分支
git switch main
# 合并功能分支
git merge feature-user-auth
# 合并时创建提交消息
git merge feature-payment -m "合并支付功能"
合并模式:
| 模式 | 命令 | 说明 |
|---|---|---|
| 快进合并 | git merge feature | 无分叉时直接移动指针 |
| 普通合并 | git merge --no-ff feature | 始终创建合并提交 |
| 压缩合并 | git merge --squash feature | 压缩为单次提交 |
六、远程分支协作
6.1 推送本地分支到远程
# 推送并设置上游追踪
git push -u origin feature-user-auth
# 之后可直接使用
git push
git pull
6.2 拉取远程分支
# 获取所有远程分支信息
git fetch origin
# 基于远程分支创建本地分支
git switch -c feature-x origin/feature-x
# 或直接拉取
git pull origin feature-x
6.3 删除远程分支
# 删除远程分支
git push origin --delete feature-old
# 或等效命令
git push origin :feature-old
七、实战场景:完整工作流程
场景:开发新功能并合并
# 1. 确保主分支最新
git switch main
git pull origin main
# 2. 创建功能分支
git switch -c feature-shopping-cart
# 3. 开发并提交
git add .
git commit -m "实现购物车核心功能"
git commit -m "添加购物车UI"
# 4. 推送远程
git push -u origin feature-shopping-cart
# 5. 创建 Pull Request (在 GitHub/GitLab)
# 6. 代码审查通过后合并到 main
# 7. 删除本地分支
git switch main
git pull origin main
git branch -d feature-shopping-cart
八、分支命名规范(最佳实践)
遵循一致的命名规范能让团队协作更顺畅:
# ✅ 推荐格式
feature/user-authentication # 新功能
bugfix/login-error-404 # Bug修复
hotfix/critical-security-patch # 紧急修复
release/v2.5.0 # 发布分支
experiment/ml-algorithm-test # 实验性分支
# ❌ 避免的命名
test # 太模糊
new-feature # 不具体
my-branch # 个人化
123 # 无意义
命名原则:
- 使用小写字母和连字符
- 包含功能/问题描述
- 可关联 Issue 编号(如
feature/JIRA-123)
九、常见问题与解决方案
Q1: 删除分支时提示"未合并"
# 检查分支状态
git branch --merged # 已合并分支
git branch --no-merged # 未合并分支
# 确认是否需要保留
git log feature-branch --oneline
# 确认废弃后强制删除
git branch -D feature-branch
Q2: 如何查看分支差异?
# 比较两个分支
git diff main feature-branch
# 查看分支独有的提交
git log main..feature-branch --oneline
Q3: 分支太多如何管理?
# 查看分支最后提交时间
git branch -v --sort=-committerdate
# 删除超过3个月未更新的分支
git branch --merged | grep -v "^\*\|main" | xargs git branch -d
Q4: 误删分支如何恢复?
# 查看操作历史
git reflog
# 找到删除前的提交哈希
# 重新创建分支
git branch recovered-branch abc1234
十、高级技巧
10.1 查看分支图谱
# 图形化显示所有分支
git log --graph --oneline --all
# 更简洁的版本
git log --oneline --graph --decorate --all
10.2 分支上游设置
# 设置上游分支
git branch -u origin/main
# 查看上游关系
git branch -vv
# 移除上游关系
git branch --unset-upstream
10.3 工作区清理
# 切换分支前检查是否有未提交更改
git status
# 临时保存更改
git stash
# 切换分支
git switch other-branch
# 恢复更改
git stash pop
十一、命令速查表
| 操作 | 命令 | 说明 |
|---|---|---|
| 查看分支 | git branch | 本地分支列表 |
| 查看全部 | git branch -a | 含远程分支 |
| 创建分支 | git branch <name> | 基于当前提交 |
| 创建+切换 | git switch -c <name> | 最常用 |
| 切换分支 | git switch <name> | 新版推荐 |
| 删除分支 | git branch -d <name> | 安全删除 |
| 强制删除 | git branch -D <name> | 谨慎使用 |
| 重命名 | git branch -m <new> | 当前分支 |
| 推送分支 | git push -u origin <name> | 设置上游 |
| 删除远程 | git push origin --delete <name> | 远程删除 |
结语:掌握分支,掌握 Git
git branch 是 Git 工作流的核心。掌握它意味着:
✅ 可以安全地并行开发多个功能
✅ 能够高效地与团队协作
✅ 可以轻松回滚和实验
✅ 保持代码库的整洁和可维护性
💡 记住:分支是廉价的,频繁创建和删除分支是 Git 的最佳实践。不要害怕创建新分支!