分支管理
本章将介绍 Git 的分支操作,包括创建、切换、合并分支等。
什么是分支?
分支是 Git 的核心功能之一,它允许你在不影响主线代码的情况下进行开发。
每个分支都是独立的开发线,可以:
- 并行开发多个功能
- 隔离实验性代码
- 修复 bug 时不影响其他功能
查看分支
# 查看本地分支
git branch
# 查看所有分支(本地+远程)
git branch -a
# 查看远程分支
git branch -r
# 查看分支详细信息
git branch -v
# 查看已合并到当前分支的分支
git branch --merged
# 查看未合并到当前分支的分支
git branch --no-merged
创建分支
# 创建新分支(不切换)
git branch feature-login
# 创建并切换到新分支
git checkout -b feature-login
# Git 新版本的简写
git switch -c feature-login
切换分支
# 切换到已有分支
git checkout feature-login
# 切换到上一个分支
git checkout -
# Git 新版本的简写
git switch main
# 切换并丢弃本地修改
git checkout -f main
注意:切换分支前要确保工作区是干净的,或者储藏当前的修改。
重命名分支
# 重命名当前分支
git branch -m new-name
# 重命名指定分支
git branch -m old-name new-name
删除分支
# 删除已合并的本地分支
git branch -d feature-login
# 强制删除本地分支(即使未合并)
git branch -D feature-login
# 删除远程分支
git push origin --delete feature-login
合并分支
基本合并
# 确保在目标分支上(如 main)
git checkout main
# 合并功能分支
git merge feature-login
合并时如果出现冲突,需要手动解决冲突后提交。
合并策略
# 使用 fast-forward 合并(不创建合并提交)
git merge --ff feature-login
# 禁止 fast-forward,始终创建合并提交
git merge --no-ff feature-login
# 使用 rebase 合并
git rebase main
解决合并冲突
当两个分支修改了同一个文件的同一部分时,会出现冲突。
-
查看冲突文件:
git status -
打开冲突文件,会看到类似:
<<<<<<< HEAD
当前分支的内容
=======
要合并的分支的内容
>>>>>>> feature-login -
手动编辑文件,选择保留的内容
-
标记冲突已解决:
git add filename.txt -
完成合并提交:
git commit
取消合并
# 取消合并
git merge --abort
变基(Rebase)
变基是将一系列提交"移动"到另一个基点上。
基本变基
# 将 feature 分支变基到 main
git checkout feature
git rebase main
交互式变基
# 修改最近 3 次提交
git rebase -i HEAD~3
交互式变基可以:
- 修改提交信息
- 合并多个提交
- 拆分提交
- 删除提交
使用场景
变基适合:
- 保持提交历史整洁
- 将功能分支的最新代码合并到主线
合并适合:
- 保留完整的分支历史
- 需要清晰的合并记录
比较分支
# 比较两个分支的差异
git diff main..feature-login
# 比较两个分支的提交
git log main..feature-login
# 查看分支独有的文件
git branch --merged main
分支命名规范
常用的分支命名:
# 功能分支
feature/user-login
feature/add-payment
# 修复分支
bugfix/fix-login-error
fix/header-alignment
# 发布分支
release/1.0.0
# 热修复分支
hotfix/security-patch
工作流示例
功能分支工作流
# 1. 从 main 创建功能分支
git checkout -b feature/new-feature
# 2. 开发功能并提交
git add .
git commit -m "添加新功能"
# 3. 同步 main 的最新代码
git fetch origin
git rebase origin/main
# 4. 开发完成后,合并到 main
git checkout main
git merge --no-ff feature/new-feature
# 5. 删除功能分支
git branch -d feature/new-feature
小结
本章我们学习了:
- 分支的概念和作用
- 查看、创建、切换分支
- 重命名和删除分支
- 合并分支和解决冲突
- 变基操作
- 分支比较
- 常用工作流
练习
- 创建两个功能分支并切换
- 在不同分支上提交修改
- 尝试合并分支并解决冲突
- 使用变基整理提交历史
- 清理不需要的分支