本文最后更新于47 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
1. 初始状态分析
- 当前分支:
main
分支(main*
表示当前所在分支) - 提交历史:只有 2 个基础提交
c0
→c1
(左侧蓝色区域) - 目标结构:
- 需要创建
bugFix
分支,在bugFix
上提交c2
; - 对
bugFix
执行rebase
,将其提交 “嫁接” 到main
最新提交后; - 最终形成
main
分支整合bugFix
提交的线性结构(右侧粉色区域)
- 需要创建
2. 核心命令与逻辑
git branch <分支名>
:创建新分支(基于当前HEAD
)。git checkout <分支名>
:切换分支(移动HEAD
指针)。git commit
:提交代码,延伸当前分支的提交历史。git rebase <目标分支>
:变基核心操作,将当前分支的提交 “重新嫁接” 到目标分支的最新提交之后,让提交历史更线性。
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:对 bugFix
执行 rebase
操作
- 切换回
main
分支并提交c3
:- 先切回
main
分支:bash git checkout main- 作用:
HEAD
指针切回main
分支(此时main
仍指向c1
)。
- 作用:
- 在
main
上提交c3
:bash git commit- 作用:
main
分支向前延伸,新增提交c3
(结构:c0 → c1 → c3
,main*
指向c3
)。
- 作用:
- 先切回
- 切换到
bugFix
分支,执行rebase
:- 切回
bugFix
分支:bash git checkout bugFix - 对
main
执行变基:bash git rebase main- 作用:将
bugFix
分支的提交c2
,重新嫁接到main
分支的最新提交c3
之后。执行后,bugFix
的提交会变成c2'
(哈希值改变,代表 “重新应用” 的提交),结构变为c0 → c1 → c3 → c2'
(bugFix*
指向c2'
)。
- 作用:将
- 切回
4. 完成验证
执行完上述步骤后,左侧分支结构会与右侧目标完全匹配:
main
分支经过c0 → c1 → c3
,再通过rebase
整合bugFix
的c2'
,最终形成线性历史;bugFix
分支的提交被 “嫁接” 到main
最新提交后,关卡自动通关。
5. 关键知识点延伸
- 变基 vs 合并:
git merge
会创建合并提交,保留分支分叉历史;git rebase
会改写提交历史,让分支结构更线性(适合整理个人开发分支,不建议对公共分支使用)。
- 变基的本质:将当前分支的提交,逐个 “重新应用” 到目标分支的最新提交之后,相当于 “搬家” 提交历史。
简单说,这关的核心是 “变基让提交历史更线性”:通过 git rebase
把 bugFix
的提交 “嫁接” 到 main
最新提交后,掌握 Git 中整理分支历史的关键操作 。