
这道题,是 Learn Git Branching 的练习题,叫"提交的技巧 #1"。
题目分析
当前状态(左侧图):
C0 ← C1 ← C2 ← C3main指向C1newImage指向C2caption*(当前分支)指向C3
目标状态(右侧图):
main和caption最终指向同一个提交newImage在C1之后(单独一条线)- 整体结构是对
newImage的提交做了修改后,caption的内容被重新应用上去
题目意图
你需要修改 newImage(C2)这个提交,但 caption(C3)依赖它。直接修改 C2 很麻烦,所以正确思路是:
用 git rebase -i 调整顺序 → 修改 → 再 rebase 回来
解题步骤
bash
# 1. 把 caption 分支上的提交顺序对调(把 newImage 的提交放到最上面)
git rebase -i HEAD~2
# 在交互界面中,把 newImage 对应的提交移到 caption 提交的上方
# 2. 现在 newImage 在最顶,对它进行修改
git commit --amend
# 3. 再次用 rebase -i 把顺序换回来(caption 在上,newImage 在下)
git rebase -i HEAD~2
# 4. 把 main 和 newImage 分支指向对应提交
git branch -f main HEAD
git branch -f newImage HEAD~1
# 5. 重置到正确位置
git rebase caption main
核心思路总结
| 步骤 | 操作 | 目的 |
|---|---|---|
| ① | rebase -i HEAD~2 换序 |
把要改的提交移到顶部 |
| ② | commit --amend |
修改该提交内容 |
| ③ | rebase -i HEAD~2 换回 |
恢复原来顺序 |
| ④ | 移动分支指针 | 让 main/newImage 指向正确位置 |
这道题的核心考点就是:当你想修改历史中间某个提交时,先用 rebase -i 把它"浮"到顶部,改完再换回来。