Git Rebase

安全 Rebase 手册 🚦


什么是 Rebase?

简单理解,rebase 就是把你当前分支上的提交“搬家”,放到目标分支(通常是 main)的最新提交之后。
就像你写的代码排队等着接力跑,把你的改动“重新插队”到最新代码后面。


为什么要用 Rebase?

  • 保持提交历史整洁、线性 🧹
  • 方便回顾和审查代码 🔍
  • 避免一堆杂乱的合并提交(merge commits) 🌀

但 Rebase 有啥坑?

  • 频繁冲突,像“搬家拆迁”现场 🏚️
  • 改历史可能导致别人分支失效 💥
  • 中断没解决冲突,Git 状态乱成一锅粥 🍲

安全 Rebase 操作步骤 🛡️

# 1. 确保工作区干净(无未提交改动)
git status
# 如果有改动,先提交或 stash
git add .
git commit -m "work in progress"      # 提交
# 或者
git stash                              # 临时存储

# 2. 切到你的开发分支(feature 分支)
git checkout feature_branch

# 3. 获取远程最新代码
git fetch origin

# 4. 对你的分支执行 rebase 到最新 main
git rebase origin/main

# 5. 如果出现冲突,Git 会提示冲突文件
# 打开冲突文件,手动编辑解决冲突后:
git add <冲突文>

# 6. 继续 rebase
git rebase --continue

# 7. 重复第5、6步,直到 rebase 完成

# 8. rebase 完成后,如果之前 stash 了改动,恢复它
git stash pop

# 9. 本地测试确保无误后,推送分支(需要强制推送)
git push -f origin feature_branch

冲突解决小Tips 💡

  • 打开冲突文件,Git 会标记冲突区域:
<<<<<<< HEAD
你的代码(main 分支的代码)
=======
你的改动(feature 分支代码)
>>>>>>> commit_hash
  • 手动编辑成正确的代码,然后保存并 git add

  • 冲突复杂时,多和同事沟通,确认改动意图

  • 避免随意“全用某一方代码”,除非很确定

Rebase 常见误区 ⚠️

错误操作可能结果正确做法
直接在未提交改动状态下 rebase被 Git 阻止或状态混乱先提交或 stash 干净工作区
中断冲突解决直接退出 rebaseGit 状态半完成,分支混乱解决冲突后 git rebase --continue
多人对同一分支强制推送代码历史被覆盖,别人代码丢失约定分支管理和推送规则

画个流程图,帮你理解更清楚 🔄

[开始]
   |
   v
[检查工作区干净?] --否--> [提交或stash]
   |

   v
[git fetch origin]
   |
   v
[git rebase origin/main]
   |
   v
[出现冲突?] --否--> [完成rebase]
   |

   v
[解决冲突并git add]
   |
   v
[git rebase --continue]
   |
   v
[回到出现冲突?]

小结

  • 保证工作区干净,提交或 stash 先行

  • rebase 遇冲突耐心解决,别着急放弃

  • rebase 完后测试,再强推到远程

  • 团队统一流程,避免踩雷

Comments