rebase
🧩 Rebase 的基本概念
git rebase <branch>是把当前分支的提交「重新应用」到<branch>的最新提交之后。- 会重写当前分支的提交历史(提交 SHA 会变化)。
🧭 推荐使用方式
✅ 开发分支 rebase 主干分支(推荐)
git checkout dev
git rebase main
目的:让 dev 分支基于 main 的最新状态开发,减少合并冲突。
❌ 主干 rebase 到开发分支(不推荐)
git checkout main
git rebase dev
这样会让主干依赖开发分支,不符合常规协作逻辑,容易带来风险。
🧯 如何撤销 rebase 操作
如果 rebase 已经成功完成,可用:
git reflog # 查看 HEAD 变动历史
git reset --hard HEAD@{N} # 回到 rebase 之前的状态
⚠️ 注意:使用 --hard 会丢弃未保存的更改。
如果 rebase 正在进行中未完成:
git rebase --abort
🚀 Rebase 后的推送操作
1. 强制推送开发分支(dev)
git push origin dev --force
原因:rebase 改变了历史,必须强推(如果之前已 push 过)。
🧨 是否能直接 git push origin HEAD:main?
✅ 可以,但需满足条件:
- 当前在
dev分支(或任意分支)。 - 想把它直接推到远程
main上。
⚠️ 风险:
- 如果本地不是基于最新
main,或远程main有别人提交,可能需要强推。 - 会覆盖远程主干历史,不适合团队协作。
git push origin HEAD:main --force
✅ 更推荐的安全做法
git checkout main
git pull origin main # 更新本地主干
git merge dev # 合并开发分支
git push origin main # 正常推送
这样做可以保留主干的历史,适合协作团队。
🧠 快速参考流程图
开发中:
git checkout main
git pull origin main
git checkout dev
git rebase main
git push origin dev --force
准备发布:
git checkout main
git merge dev
git push origin main