本文最后更新于47 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
1. 初始状态分析
- 当前分支:
main
分支(main*
表示当前所在分支) - 提交历史:只有 2 个基础提交
c0
→c1
(左侧蓝色区域) - 目标结构:
- 需要创建
bugFix
分支,在bugFix
上提交c2
; - 切回
main
分支提交c3
→c4
; - 最后合并
bugFix
到main
,形成c1
分叉后合并的结构(右侧粉色区域)
- 需要创建
2. 核心命令与逻辑
git branch <分支名>
:创建新分支(基于当前HEAD
)。git checkout <分支名>
:切换分支(移动HEAD
指针)。git commit
:提交代码,延伸当前分支的提交历史。git merge <分支名>
:合并指定分支到当前分支(关键操作,用于整合分叉的提交)。
3. 通关步骤(分阶段执行)
阶段 1:创建 bugFix
分支并提交
- 创建
bugFix
分支:bash git branch bugFix- 作用:基于当前
main
分支的c1
,创建新分支bugFix
(此时main
和bugFix
都指向c1
)。
- 作用:基于当前
- 切换到
bugFix
分支:bash git checkout bugFix- 作用:让
HEAD
指针移动到bugFix
分支,后续提交会延伸bugFix
的历史。
git checkout -b <分支名>
(等价于git branch <分支名>
+git checkout <分支名>
)。 - 作用:让
- 在
bugFix
上提交c2
: 关卡默认模拟 “有修改待提交”,直接执行:bash git commit- 作用:
bugFix
分支向前延伸,新增提交c2
(结构:c0 → c1 → c2
,bugFix*
指向c2
)。
- 作用:
阶段 2:切回 main
分支并提交
- 切换回
main
分支:bash git checkout main- 作用:
HEAD
指针切回main
分支(此时main
仍指向c1
)。
- 作用:
- 在
main
上提交c3
: 执行:bash git commit- 作用:
main
分支向前延伸,新增提交c3
(结构:c0 → c1 → c3
,main*
指向c3
)。
- 作用:
- 在
main
上继续提交c4
: 再次执行:bash git commit- 作用:
main
分支继续延伸,新增提交c4
(结构:c0 → c1 → c3 → c4
,main*
指向c4
)。
- 作用:
阶段 3:合并 bugFix
到 main
- 合并
bugFix
分支到main
:确保当前在main
分支(已通过git checkout main
切换),执行:bash git merge bugFix- 作用:将
bugFix
分支的提交(c2
)合并到main
分支。由于main
和bugFix
是 “分叉后合并” 的关系,Git 会创建一个合并提交(自动生成新节点,如c4,最终形成目标中的分叉合并结构:
c1分叉为
c2(
bugFix)和
c3(
main),再合并到c4
main`。
- 作用:将
4. 完成验证
执行完上述步骤后,左侧分支结构会与右侧目标完全匹配:
c0 → c1
分叉为bugFix
分支(c2
)和main
分支(c3
);main
分支合并bugFix
后,形成整合的提交链,关卡自动通关。
5. 关键知识点延伸
- 合并的两种场景:
- “快进合并”:如果合并的分支是当前分支的直接延伸(无分叉),Git 会直接移动指针(如
main
合并一个未分叉的bugFix
)。 - “三方合并”:如果分支有分叉(如本关卡),Git 会创建一个新的合并提交,同时保留两个分支的历史。
- “快进合并”:如果合并的分支是当前分支的直接延伸(无分叉),Git 会直接移动指针(如
- 实际开发意义:合并用于整合不同分支的工作(如功能开发分支合并到主分支),
git merge
是团队协作中整合代码的核心操作。