本文最后更新于167 天前,其中的信息可能已经过时,如有错误请发送邮件到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 中整理分支历史的关键操作 。







