Git 分支管理完全指南:从入门到团队协作

更新于 2026年7月7日 0 0

前言

Git 分支是 Git 最强大的功能,也是团队协作的核心。但大多数教程只停留在命令层面,本文从实战角度讲分支管理:什么时候创建分支、用什么策略、怎么处理冲突。

图 1:分支工作流

一、基础命令

查看分支

# 查看本地分支
git branch

# 查看所有分支(包括远程)
git branch -a

# 查看分支及最后提交
git branch -v

# 查看已合并到当前分支的分支
git branch --merged

# 查看未合并到当前分支的分支
git branch --no-merged

创建分支

# 创建新分支
git branch feature-login

# 创建并切换(推荐)
git switch -c feature-login

# 基于特定分支创建
git switch -c feature-login origin/main

# 创建空分支(无历史记录)
git switch --orphan gh-pages
git rm -rf .

切换分支

# 切换分支(推荐)
git switch main

# 切换并恢复工作区
git switch -c feature-login

# 切回上一个分支
git switch -

合并分支

# 切换到目标分支
git switch main

# 合并 feature 分支
git merge feature-login

# 合并并保留分支历史
git merge --no-ff feature-login

# 只合并特定提交
git cherry-pick abc123

删除分支

# 删除已合并的分支
git branch -d feature-login

# 强制删除未合并的分支
git branch -D feature-login

# 删除远程分支
git push origin --delete feature-login

# 清理已删除的远程分支引用
git fetch --prune

二、高级操作

变基(Rebase)

将当前分支的提交移动到目标分支顶部:

# 交互式变基(整理提交历史)
git rebase -i HEAD~5

# 变基到 main
git rebase main

# 变基后推送到远程(需要 force push)
git push --force-with-lease

变基 vs 合并

场景选择原因
个人功能分支Rebase保持线性历史
公共分支Merge避免重写历史
整理提交Rebase -i合并/修改提交
保留上下文Merge保留分支合并记录

暂存工作

# 暂存当前更改
git stash

# 暂存并添加描述
git stash push -m "正在开发登录功能"

# 恢复最近一次暂存
git stash pop

# 恢复但保留暂存
git stash apply

# 查看暂存列表
git stash list

# 恢复特定暂存
git stash apply stash@{2}

# 删除暂存
git stash drop stash@{0}

交互式变基

整理提交历史:

git rebase -i HEAD~5

编辑器会显示:

pick abc1234 feat: add login button
pick def5678 fix: login button style
pick ghi9012 feat: add form validation
pick jkl3456 fix: form validation bug
pick mno7890 feat: add logout button

常用操作:

pick   = 保留提交
reword = 修改提交消息
edit   = 修改提交内容
squash = 合并到上一个提交
fixup  = 合并但丢弃提交消息
drop   = 删除提交

示例:合并修复提交

pick abc1234 feat: add login button
fixup def5678 fix: login button style
pick ghi9012 feat: add form validation
fixup jkl3456 fix: form validation bug
pick mno7890 feat: add logout button

Cherry-Pick

从其他分支选择特定提交:

# 选择单个提交
git cherry-pick abc1234

# 选择多个提交
git cherry-pick abc1234 def5678

# 选择但不自动提交
git cherry-pick --no-commit abc1234

三、冲突解决

冲突类型

  1. 内容冲突:同一行被修改
  2. 删除冲突:一方删除,一方修改
  3. 重命名冲突:双方重命名同一文件

解决步骤

# 1. 查看冲突文件
git status

# 2. 打开冲突文件,手动编辑
# 冲突标记:
# <<<<<<< HEAD
# 当前分支的内容
# =======
# 合并分支的内容
# >>>>>>> feature-login

# 3. 添加解决后的文件
git add <file>

# 4. 继续合并
git merge --continue

# 或放弃合并
git merge --abort

使用工具解决

# 使用 VS Code
git mergetool --tool=vscode

# 使用 JetBrains
git mergetool --tool=intellij

预防冲突

  1. 频繁同步 main:每天从 main 拉取最新代码
  2. 小步提交:减少冲突范围
  3. 代码所有权:不同人负责不同模块
  4. 使用特性开关:避免长期分支

四、分支策略

Git Flow

图 2:Git Flow 分支模型

分支说明

分支用途生命周期
main生产代码永久
develop开发集成永久
feature/*新功能短期
release/*版本发布短期
hotfix/*紧急修复短期

适用场景

  • 发布周期较长(周/月)
  • 需要维护多个版本
  • 大型团队协作

GitHub Flow

图 3:GitHub Flow

工作流程

  1. main 创建功能分支
  2. 开发并推送
  3. 创建 Pull Request
  4. 代码审查
  5. 合并到 main
  6. 自动部署

适用场景

  • 持续部署
  • 小到中型团队
  • 快速迭代

Trunk-Based Development

工作流程

  1. 所有开发者直接向 main 提交
  2. 使用短生命周期分支(< 1 天)
  3. 通过特性开关控制功能发布
  4. 依赖自动化测试保证质量

适用场景

  • 高度成熟的工程团队
  • 完善的 CI/CD 流程
  • 强大的自动化测试

选择建议

团队规模发布频率推荐策略
1-5 人每天GitHub Flow
5-20 人每周GitHub Flow
20+ 人每月Git Flow
100+ 人持续Trunk-Based

五、实用命令

查看历史

# 查看分支图
git log --oneline --graph --all

# 查看特定文件的历史
git log -p <file>

# 查看谁修改了某行
git blame <file>

# 查看两个分支的差异
git diff main..feature-login

撤销操作

# 撤销最后一次提交(保留更改)
git reset --soft HEAD~1

# 撤销最后一次提交(丢弃更改)
git reset --hard HEAD~1

# 撤销已推送的提交(创建新提交)
git revert abc1234

# 恢复被删除的分支
git reflog
git switch -d abc1234

清理操作

# 删除已合并的本地分支
git branch --merged main | grep -v "\*\|main" | xargs -n 1 git branch -d

# 清理不再追踪的远程分支
git fetch --prune

# 查找大文件
git rev-list --objects --all | \
  git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | \
  sed -n 's/^blob //p' | sort -rnk2 | head -10

别名配置

如果你用 Oh My Zsh,Git 插件已经预置了 100+ 个常用别名,开箱即用。

git config --global alias.st "status"
git config --global alias.co "checkout"
git config --global alias.br "branch"
git config --global alias.cm "commit -m"
git config --global alias.lg "log --oneline --graph --all"
git config --global alias.unstage "reset HEAD --"

六、最佳实践

分支命名规范

feature/user-login
feature/payment-gateway
bugfix/login-error
hotfix/security-patch
release/v1.2.0

提交规范

feat: 新功能
fix: 修复 bug
docs: 文档更新
style: 代码格式
refactor: 重构
test: 测试
chore: 构建/工具

PR 最佳实践

  1. 小步提交:每个 PR 只做一件事
  2. 清晰描述:说明做了什么、为什么做
  3. 关联 Issue:引用相关 issue
  4. 自测通过:确保 CI 通过
  5. 及时响应:尽快处理 review 意见

总结

Git 分支管理的核心原则:

  1. 保持分支短生命周期:长期分支容易产生冲突
  2. 频繁同步 main:每天从 main 拉取最新代码
  3. 小步提交:减少冲突范围
  4. 使用 PR/MR:进行代码审查
  5. 选择合适的策略:根据团队规模和发布频率

参考资料

🔗 原文链接 分享让更多人看到

评论