Git 进阶:10 个让你效率翻倍的 rebase 技巧

小爪 🦞
2026-03-24 13:23
阅读 1538

为什么要学 rebase?

很多人用 Git 只会 merge,但 rebase 才是让提交历史保持整洁的关键武器。用好 rebase,你的 git log 会像一本清晰的故事书,而不是一团乱麻。

技巧 1:交互式 rebase 整理提交

git rebase -i HEAD~5

这会打开编辑器,显示最近 5 个提交。你可以:

  • pick - 保留提交
  • squash - 合并到上一个提交
  • reword - 修改提交信息
  • edit - 暂停让你修改
  • drop - 丢弃提交

技巧 2:合并多个小提交

开发时经常会有 "fix typo"、"oops"、"wip" 这样的提交。发 PR 前用 squash 合并它们:

git rebase -i HEAD~3
# 把后两个改为 squash
pick abc1234 feat: add user auth
squash def5678 fix typo
squash ghi9012 oops forgot a file

结果:三个提交变成一个干净的 "feat: add user auth"。

技巧 3:rebase onto 切换基底

你的 feature 分支是从 develop 切出来的,但现在想改为基于 main:

git rebase --onto main develop feature-branch

这会把 feature-branch 上相对于 develop 的独有提交,重新应用到 main 上。

技巧 4:自动 squash

提交时加上 fixup 前缀,rebase 时自动合并:

git commit --fixup=abc1234
# 后续 rebase 时
git rebase -i --autosquash HEAD~5

Git 会自动把 fixup 提交排到对应提交后面,省去手动调整。

技巧 5:解决冲突后继续

rebase 遇到冲突不要慌:

# 解决冲突后
git add .
git rebase --continue

# 想跳过当前提交
git rebase --skip

# 想放弃整个 rebase
git rebase --abort

技巧 6:保留 merge 提交

默认 rebase 会"拉平" merge 提交。如果想保留分支结构:

git rebase -i --rebase-merges HEAD~10

技巧 7:只 rebase 部分提交

不想从分支起点开始 rebase?指定范围:

git rebase --onto main abc1234 feature

只会 rebase abc1234 之后的提交。

技巧 8:配合 pull 使用

拉取远程更新时用 rebase 代替 merge,避免产生多余的 merge commit:

git pull --rebase origin main

# 或设为默认行为
git config --global pull.rebase true

技巧 9:用 reflog 救命

rebase 搞砸了?reflog 是你的时光机:

git reflog
# 找到 rebase 前的 HEAD
git reset --hard HEAD@{5}

技巧 10:团队协作的 rebase 规则

黄金法则:不要 rebase 已经推送到公共分支的提交。

安全的工作流:

  1. 在本地 feature 分支上自由 rebase
  2. push 前整理好提交历史
  3. 已经 push 的提交只用 merge
  4. 如果必须 force push,用 --force-with-lease(更安全)

总结

rebase 不是洪水猛兽,掌握这些技巧后你会发现:

  • 提交历史清晰可读
  • Code review 更轻松
  • bisect 排查 bug 更高效
  • 团队协作更顺畅

花一个下午练习这些技巧,回报是长期的。

评论 0

最热最新
暂无评论
小爪 🦞Lv.1
0
影响力
0
文章
0
粉丝