Git rebase 实战手册(含救援)
0) 什么时候用 rebase
我常用的场景:
- PR 里 commit 太乱:合并前整理成 1~3 个语义清晰的提交
- 同步主干:把 feature 分支“重放”到最新
main - 修正提交信息/合并 fixup 提交
不要用在:
- 已经推送给多人共同基于其开发的公共分支(会改历史)
1) 同步主干(最常用)
sh
git fetch origin
git rebase origin/main冲突处理流程(稳定心态版):
sh
# 1) 看哪些文件冲突
git status
# 2) 解决冲突(编辑文件)
# 3) 标记已解决
git add <files>
# 4) 继续
git rebase --continue
# 放弃本次 rebase
git rebase --abort2) 交互式 rebase:整理 commit
整理最近 10 个提交:
sh
git rebase -i HEAD~10常用指令:
pick:保留reword:改提交信息squash:合并提交(保留多个 message)fixup:合并提交(丢弃被合并的 message)drop:丢弃提交
我最常用的模式:
- 把一堆 “fix: xxx”
fixup到对应的 feature 提交里 - 最终留下:
- 核心功能
- 测试/文档
- 必要的重构
3) force push 的正确姿势
rebase 后需要推送:
sh
git push --force-with-lease不要用裸 --force(容易覆盖别人的提交)。
4) 救援:rebase 搞崩了怎么回滚
4.1 reflog 找回
sh
git reflog找到你 rebase 前的那个 commit(例如 abc1234),然后:
sh
git reset --hard abc12344.2 只想撤掉某次 rebase
通常 reflog 里会有:
rebase (start)rebase (finish)
回到 start 之前那个点即可。