# Git 分支管理 > 📚 Git 教程系列 - 第 5 篇 > 📅 最后更新:2026-03-15 > 🌿 适合人群:想掌握 Git 分支高级用法 --- ## 🌳 什么是分支? **分支**是 Git 最强大的功能之一,允许你在不同的开发线上并行工作。 ### 分支的本质 Git 的分支是**指向 commit 的指针**,非常轻量级。 ``` commit A ──► commit B ──► commit C (main) │ └─► commit D (feature) ``` ### 为什么需要分支? | 场景 | 解决方案 | |------|---------| | 开发新功能 | 创建 feature 分支 | | 修复紧急 bug | 创建 hotfix 分支 | | 准备新版本 | 创建 release 分支 | | 实验性代码 | 创建 experiment 分支 | --- ## 🛠️ 分支基础操作 ### 查看分支 ```bash # 查看本地分支 git branch # 查看远程分支 git branch -r # 查看所有分支 git branch -a # 查看分支的详细信息 git branch -v # 查看当前分支 git branch --show-current ``` ### 创建分支 ```bash # 创建新分支(基于当前分支) git branch feature-login # 创建并切换到新分支 git checkout -b feature-login # 或(Git 2.23+) git switch -c feature-login # 基于特定 commit 创建分支 git branch feature-old a1b2c3d # 基于远程分支创建本地分支 git checkout -b feature origin/feature ``` ### 切换分支 ```bash # 切换到已有分支 git checkout feature-login # 或(Git 2.23+) git switch feature-login # 切换到上一个分支 git checkout - ``` ### 删除分支 ```bash # 删除本地分支(已合并) git branch -d feature-login # 强制删除(未合并) git branch -D feature-login # 删除远程分支 git push origin --delete feature-login # 删除多个分支 git branch -d feature-1 feature-2 feature-3 ``` --- ## 🔀 合并分支 ### 基本合并 ```bash # 1. 切换到目标分支 git checkout main # 2. 合并功能分支 git merge feature-login # 3. 查看合并结果 git log --oneline --graph -n 10 ``` ### 合并策略 #### 1. Fast-Forward 合并(默认) 当目标分支没有新提交时,Git 会直接移动指针。 ```bash # main 分支 A ──► B # feature 分支 B ──► C ──► D # 合并后 A ──► B ──► C ──► D (main, feature) ``` ```bash # 禁用 Fast-Forward(创建合并提交) git merge --no-ff feature-login ``` #### 2. Three-Way 合并 当两个分支都有新提交时,Git 会创建合并提交。 ```bash # 合并前 main: A ──► B ──► E │ feature: C ──► D # 合并后 main: A ──► B ──► E ──► M │ ▲ feature: C ──► D ──┘ ``` ### 解决合并冲突 ```bash # 1. 尝试合并 git merge feature-login # 输出:CONFLICT (content): Merge conflict in main.py # 2. 查看冲突文件 git status # 输出:both modified: main.py # 3. 编辑冲突文件 # Git 会标记冲突内容: """ <<<<<<< HEAD 这是 main 分支的代码 ======= 这是 feature 分支的代码 >>>>>>> feature-login """ # 4. 手动解决冲突,保留需要的代码 # 5. 标记冲突已解决 git add main.py # 6. 完成合并 git commit -m "解决合并冲突" # 或取消合并 git merge --abort ``` --- ## 🌿 分支工作流 ### Git Flow(经典工作流) ``` main (生产) │ ├─► develop (开发) │ │ │ ├─► feature/login (新功能) │ ├─► feature/payment (新功能) │ └─► hotfix/bug-fix (紧急修复) │ └─► release/v1.0 (版本发布) ``` **分支类型:** | 分支 | 命名 | 来源 | 合并到 | 说明 | |------|------|------|--------|------| | 主分支 | `main` | - | - | 生产环境代码 | | 开发分支 | `develop` | main | main | 日常开发 | | 功能分支 | `feature/*` | develop | develop | 新功能开发 | | 发布分支 | `release/*` | develop | main, develop | 版本发布 | | 热修复 | `hotfix/*` | main | main, develop | 紧急修复 | ### GitHub Flow(简化工作流) ``` main │ └─► feature/login (功能分支) │ └─► Pull Request → main ``` **步骤:** 1. 从 `main` 创建功能分支 2. 开发并提交 3. 推送到远程 4. 创建 Pull Request 5. Code Review 6. 合并到 `main` ### GitLab Flow(带环境分支) ``` main │ ├─► production (生产环境) │ ├─► pre-production (预发布) │ └─► feature/* (功能分支) ``` --- ## 💡 实用分支技巧 ### 重命名分支 ```bash # 重命名当前分支 git branch -m old-name new-name # 重命名其他分支 git branch -m feature-login feature-user-auth # 如果远程已推送 git push origin -u new-name git push origin --delete old-name ``` ### 查看分支关系 ```bash # 图形化查看分支 git log --oneline --graph --all # 查看分支的提交差异 git log main..feature # 查看哪些分支已合并到当前分支 git branch --merged # 查看哪些分支未合并到当前分支 git branch --no-merged ``` ### 分支包含关系 ```bash # 查看分支包含哪些提交 git log feature ^main # 查看某个 commit 在哪些分支 git branch --contains a1b2c3d ``` ### 清理已合并的分支 ```bash # 查看已合并到 main 的分支 git branch --merged main # 删除已合并的分支(保留 main 和 develop) git branch --merged main | grep -v "main" | grep -v "develop" | xargs git branch -d ``` --- ## 🚨 常见问题解决 ### 问题 1:合并错了分支 ```bash # 如果刚合并,还没推送 git reset --hard HEAD~1 # 或者使用 reflog 找回 git reflog git reset --hard HEAD@{1} ``` ### 问题 2:想切换到另一个分支但有未提交的修改 ```bash # 方法 1:暂存修改 git stash git checkout other-branch git stash pop # 方法 2:强制切换(会丢失修改) git checkout -f other-branch ``` ### 问题 3:分支太多找不到 ```bash # 按名称搜索分支 git branch | grep "feature" # 查看最近使用的分支 git reflog | grep "checkout" # 使用工具 gitk --all # 图形化查看 ``` ### 问题 4:误删了分支 ```bash # 查看 reflog git reflog # 找到删除前的 commit git branch recovered-branch a1b2c3d ``` --- ## 🎯 最佳实践 ### 分支命名规范 ```bash # 功能分支 feature/user-login feature/payment-gateway feature/search-function # 修复分支 fix/login-bug fix/memory-leak # 热修复分支 hotfix/critical-security-fix # 发布分支 release/v1.0.0 release/v2.1.0-beta # 实验分支 experiment/new-ui prototype/ml-algorithm ``` ### 提交信息规范 ```bash # 格式:(): # 类型 feat: 新功能 fix: 修复 bug docs: 文档更新 style: 格式调整 refactor: 重构 test: 测试 chore: 构建/工具 # 示例 feat(auth): 添加用户登录功能 fix(api): 修复登录接口 500 错误 docs(readme): 更新安装说明 ``` ### 分支生命周期 ```bash # 1. 创建分支(从最新 develop) git checkout develop git pull git checkout -b feature/new-feature # 2. 定期同步 develop git fetch origin git rebase origin/develop # 3. 完成后合并回 develop git checkout develop git merge --no-ff feature/new-feature # 4. 删除功能分支 git branch -d feature/new-feature git push origin --delete feature/new-feature ``` --- ## 📊 分支对比工具 ### 使用 git diff ```bash # 比较两个分支 git diff main..feature # 比较文件名 git diff main..feature -- main.py # 统计差异 git diff --stat main..feature ``` ### 使用图形工具 ```bash # GitK(内置) gitk --all # Git GUI git gui # 第三方工具 git difftool # 配置外部 diff 工具 git mergetool # 配置外部 merge 工具 ``` --- ## 🎯 小结 | 操作 | 命令 | |------|------| | 查看分支 | `git branch` | | 创建分支 | `git branch name` | | 切换分支 | `git checkout name` | | 创建并切换 | `git checkout -b name` | | 删除分支 | `git branch -d name` | | 合并分支 | `git merge name` | | 解决冲突 | 编辑 → `git add` → `git commit` | | 查看关系 | `git log --graph --all` | | 暂存修改 | `git stash` | | 恢复暂存 | `git stash pop` | --- > 💡 **下一步**:继续学习 [06-远程仓库操作](./06-远程仓库操作.md)