Appearance
第5章:分支管理
5.1 分支核心概念
什么是分支
分支是 Git 中非常重要的概念,它允许你在一个独立的环境中开发新功能或修复 bug,而不会影响主代码库。
通俗讲解:
- 想象一下,你正在写一本书,主分支(master/main)是已经完成的章节
- 当你想写一个新章节时,你创建一个新的分支,在这个分支上进行写作
- 当新章节完成后,你可以将它合并回主分支
- 这样,主分支始终保持稳定,而你可以在分支上自由实验
分支的作用
- 隔离开发:不同功能可以在不同分支上独立开发,互不干扰
- 并行开发:多个开发者可以同时在不同分支上工作
- 实验性功能:可以在分支上尝试新想法,失败了也不会影响主分支
- Bug 修复:可以在分支上修复 bug,然后合并回主分支
- 版本发布:可以为每个版本创建分支,方便后续维护
5.2 分支基础命令
git branch:查看、创建、删除分支
功能:管理分支(查看、创建、删除)
用法:
bash
# 查看本地分支
git branch
# 查看远程分支
git branch -r
# 查看所有分支(本地和远程)
git branch -a
# 创建新分支
git branch <分支名>
# 删除分支
git branch -d <分支名>
# 强制删除分支(即使有未合并的修改)
git branch -D <分支名>
# 重命名分支
git branch -m <旧分支名> <新分支名>示例:
bash
# 查看本地分支
git branch
# 创建新分支
git branch feature-branch
# 删除分支
git branch -d feature-branchgit checkout / git switch:切换分支
git checkout
功能:切换到指定分支
用法:
bash
# 切换到指定分支
git checkout <分支名>
# 创建并切换到新分支
git checkout -b <分支名>
# 切换到上一个分支
git checkout -git switch(Git 2.23+)
功能:切换到指定分支(较新的命令)
用法:
bash
# 切换到指定分支
git switch <分支名>
# 创建并切换到新分支
git switch -c <分支名>
# 切换到上一个分支
git switch -示例:
bash
# 切换到 main 分支
git checkout main
# 或
git switch main
# 创建并切换到新分支
git checkout -b feature-branch
# 或
git switch -c feature-branchgit checkout -b:创建并切换分支
功能:创建一个新分支并立即切换到该分支
用法:
bash
# 创建并切换到新分支
git checkout -b <分支名>
# 从指定分支创建并切换到新分支
git checkout -b <新分支名> <源分支名>示例:
bash
# 从当前分支创建并切换到新分支
git checkout -b feature-login
# 从 main 分支创建并切换到新分支
git checkout -b feature-login main5.3 分支合并
git merge:合并分支
功能:将指定分支的修改合并到当前分支
用法:
bash
# 合并指定分支到当前分支
git merge <分支名>
# 合并时创建一个新的合并提交
git merge --no-ff <分支名>参数说明:
--no-ff:强制创建一个新的合并提交,即使可以快进合并--ff-only:只进行快进合并,如果不能快进合并则失败
示例:
bash
# 切换到 main 分支
git checkout main
# 合并 feature-branch 到 main 分支
git merge feature-branch两种合并场景
快进合并(Fast-forward Merge):
- 当目标分支是当前分支的直接后代时
- Git 会直接移动指针,不会创建新的合并提交
- 优点:历史记录简洁
- 缺点:无法看出分支的合并历史
三方合并(Three-way Merge):
- 当目标分支和当前分支有不同的提交历史时
- Git 会创建一个新的合并提交,包含两个分支的修改
- 优点:保留分支的合并历史
- 缺点:历史记录会有更多的合并提交
5.4 合并冲突解决
什么是合并冲突
当两个分支修改了同一个文件的同一部分时,Git 无法自动决定使用哪个版本,就会产生合并冲突。
冲突表现
当合并分支时,如果出现冲突,Git 会显示类似以下信息:
Auto-merging file.txt
CONFLICT (content): Merge conflict in file.txt
Automatic merge failed; fix conflicts and then commit the result.解决冲突步骤
查看冲突文件
bashgit status编辑冲突文件 冲突文件中会包含类似以下内容:
<<<<<<<< HEAD 这是当前分支的内容 ======== 这是要合并的分支的内容 >>>>>>>> feature-branch<<<<<<< HEAD:当前分支的内容=======:分隔符>>>>>>> feature-branch:要合并的分支的内容
手动解决冲突 编辑文件,保留需要的内容,删除冲突标记
标记冲突已解决
bashgit add <冲突文件>完成合并
bashgit commit -m "Resolve merge conflict"
冲突解决示例
冲突文件示例:
<<<<<<< HEAD
Hello from main branch
=======
Hello from feature branch
>>>>>>> feature-branch解决后的文件:
Hello from main branch
Hello from feature branch完成合并:
bash
git add file.txt
git commit -m "Resolve merge conflict"冲突解决技巧
- 保持冷静:合并冲突是正常的,不要慌张
- 仔细阅读:认真阅读冲突标记两边的内容
- 理解意图:理解两个分支的修改意图
- 测试验证:解决冲突后,确保代码能正常运行
- 提交信息:在提交信息中说明冲突解决的内容
5.5 分支管理规范
分支命名规范
- 主分支:
main或master - 开发分支:
develop - 功能分支:
feature/功能名称 - bug 修复分支:
fix/bug 描述 - 发布分支:
release/版本号 - 热修复分支:
hotfix/问题描述
分支管理策略
Git Flow:
- main:生产环境分支,保持稳定
- develop:开发分支,集成所有功能
- feature:功能分支,从 develop 分支创建
- release:发布分支,从 develop 分支创建
- hotfix:热修复分支,从 main 分支创建
GitHub Flow:
- main:生产环境分支,保持稳定
- feature:功能分支,从 main 分支创建
- PR:通过 Pull Request 合并到 main 分支
新手必遵循的规范
- 不要直接修改主分支:所有修改都应该在分支上进行
- 定期合并主分支:在分支开发过程中,定期从主分支合并最新代码
- 及时删除无用分支:完成开发后,及时删除已合并的分支
- 保持分支清洁:每个分支只负责一个功能或修复
- 提交信息清晰:使用规范的提交信息,说明分支的目的
5.6 分支实操案例
创建分支、开发、合并、删除完整流程
操作步骤:
查看当前分支
bashgit branch创建并切换到新分支
bashgit checkout -b feature-login在新分支上开发
bash# 创建登录相关文件 echo "Login functionality" > login.js git add login.js git commit -m "Add login functionality" # 修改现有文件 echo "Import login module" >> app.js git add app.js git commit -m "Update app.js to import login module"切换回主分支
bashgit checkout main合并新分支到主分支
bashgit merge feature-login删除已合并的分支
bashgit branch -d feature-login查看提交历史
bashgit log --oneline --graph
分支冲突解决实战
操作步骤:
创建并切换到 feature 分支
bashgit checkout -b feature-conflict修改文件
bashecho "Feature branch change" > conflict.txt git add conflict.txt git commit -m "Update conflict.txt in feature branch"切换回 main 分支
bashgit checkout main修改同一文件
bashecho "Main branch change" > conflict.txt git add conflict.txt git commit -m "Update conflict.txt in main branch"尝试合并 feature 分支
bashgit merge feature-conflict解决冲突
- 编辑 conflict.txt 文件
- 解决冲突后提交
bashgit add conflict.txt git commit -m "Resolve merge conflict"删除 feature 分支
bashgit branch -d feature-conflict
通过本章的学习,你已经掌握了 Git 分支的核心概念和操作。分支管理是 Git 的强大功能之一,它允许你在不影响主代码库的情况下进行开发和实验。接下来,我们将学习 Git 的远程仓库和团队协作。
