git分支介绍及常用命令

1.分支基础概念

概念 说明
分支 (Branch) 指向某个提交的指针,独立开发线
HEAD 当前检出的分支/提交引用
主分支 通常叫 mainmaster,代表稳定版本
合并 (Merge) 将两个分支的历史整合在一起
变基 (Rebase) 将一个分支的提交”重放”到另一个分支之上

2.常用分支命令

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
# 查看分支
git branch # 本地分支
git branch -r # 远程分支
git branch -a # 所有分支
git branch -v # 带最后提交信息

# 创建与切换
git branch feature-x # 创建分支
git checkout feature-x # 切换到分支
git switch feature-x # 新版切换命令
git checkout -b feature-x # 创建并切换(快捷方式)

# 删除分支
git branch -d feature-x # 安全删除(已合并)
git branch -D feature-x # 强制删除(未合并)
git push origin --delete feature-x # 删除远程分支

# 合并分支
git checkout main
git merge feature-x # 普通合并(保留历史)
git merge --squash feature-x # 压缩合并(一条提交)
git merge --no-ff feature-x # 非快进合并(保留分支痕迹)

# 变基
git checkout feature-x
git rebase main # 将 feature-x 变基到 main 上

3.主流分支工作流

3.1 Git Flow

main (生产环境)
  ↑
develop (集成分支)
  ↑
feature/* ─┐
release/* ─┼─→ 预发布
hotfix/* ──┘
分支类型 命名 来源 去向 生命周期
功能分支 feature/xxx develop develop 短期
发布分支 release/xxx develop main + develop 中期
热修复分支 hotfix/xxx main main + develop 紧急
开发分支 develop - - 永久
主分支 main - - 永久

适用场景: 有固定发布周期的传统项目(如版本化软件发布)


3.2 GitHub Flow

main (始终可部署)
  ↑
feature/* ──→ PR/MR ──→ 合并到 main
规则 说明
只有 main 分支 极简,无 develop/release 分支
功能分支从 main 创建 git checkout -b feature/xxx
完成即合并 通过 Pull Request 审核
合并后直接部署 main 始终处于可发布状态

适用场景: 持续交付的 Web 应用、SaaS 服务


3.3 GitLab Flow

main (生产环境)
  ↑
environment/* ──→ 对应环境的分支
  ↑
feature/* ──→ 功能开发
规则 说明
每个环境一个分支 productionstagingdev
分支保护 只能 MR 合并,不能直接 push
预发布环境 staging 分支对应测试环境

适用场景: 多环境部署的 CI/CD 项目


3.4 Trunk-Based Development (主干开发)

main (唯一长期分支)
  ↑
short-lived feature branches (1-2天)
  ↑
CI/CD 自动化测试 → 合入 main
要点 说明
分支生命周期极短 通常不超过 1 天
频繁合入主干 每天多次合并到 main
特性开关 (Feature Flag) 未完成的代码通过开关隐藏
强 CI/CD 支撑 自动化测试保证主干稳定

适用场景: 大厂级持续交付(Google、Meta 等)


4.分支策略对比

维度 Git Flow GitHub Flow Trunk-Based
分支数量 极少
学习曲线 陡峭 简单 中等
发布节奏 固定版本 随时发布 随时发布
适合团队 中大型 中小团队 大型工程团队
CI/CD 要求 一般 需要 强依赖
风险控制 发布分支隔离 PR 审查 Feature Flag
复杂度

5.分支保护规则

5.1 保护主分支

1
2
3
4
5
6
7
# GitHub/GitLab 中设置分支保护规则:
✓ 禁止强制推送 (No force push)
✓ 禁止直接推送到 main
✓ 要求至少 N 人审核批准
✓ 要求 CI 检查通过
✓ 要求线性历史(可选)
✓ 签名提交(可选)

5.2 分支命名规范

feature/xxx     # 新功能开发
bugfix/xxx      # Bug 修复
release/x.y.z   # 发布准备
hotfix/xxx      # 线上紧急修复
docs/xxx        # 文档更新
chore/xxx       # 杂项维护

5.3 提交信息规范

feat: 添加用户登录功能
fix: 修复支付超时问题
docs: 更新 API 文档
refactor: 重构订单模块
test: 添加单元测试
chore: 升级依赖版本

6.常见冲突与解决

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 合并冲突时的处理流程
git merge feature-x
# 出现冲突 → 手动编辑冲突文件 → 标记解决
git add <resolved-files>
git commit -m "resolve merge conflict"

# 变基冲突
git rebase main
# 冲突时手动解决 → 继续变基
git add <resolved-files>
git rebase --continue

# 放弃变基/合并
git rebase --abort
git merge --abort

7.分支清理策略

1
2
3
4
5
6
7
8
9
10
11
# 清理已合并的本地分支
git branch --merged main | grep -v "^\*\| main" | xargs git branch -d

# 清理已合并的远程分支
git fetch --prune

# 查看大分支/长期未活跃的分支
git for-each-ref --sort=-committerdate refs/heads/ --format='%(refname:short) %(committerdate:relative)'

# 清理远程已删除的本地跟踪
git remote prune origin