首页 / 开发工具 / Git救火三件套实录:rebase整

Git救火三件套实录:rebase整理提交、cherry-pick搬补丁、bisect秒抓坏提交

Roxi
Roxi 加速器 — 稳定·快速·安全
全球节点覆盖,支持所有主流平台,一键连接无需配置。新用户免费试用。
立即体验 →

Chapter 1:OK so,先把混乱提交压成能看的历史

性价比88易用性82稳定性95安全性90客服75

兄弟们开机!这里是 eccfy,今天不讲空概念,直接打开终端救一个真实场景:功能分支有 7 个提交,里面混着“改 typo”“临时打印”“真正逻辑修复”。接下来我们用 Git rebase教程里最实用的交互式 rebase,把它压成 2 个干净提交。

屏幕看这里,我先确认当前分支和提交:

git status
git log --oneline --decorate -7

Now watch this,启动交互式整理:

git rebase -i HEAD~7

编辑器里把无意义提交前面的 pick 改成 squash 或 fixup。我的习惯是:保留“业务变更”一个 pick,保留“测试补充”一个 pick,其它临时提交全部 fixup。保存退出后,如果冲突,别慌:

git status
git diff
# 手动改冲突文件后
git add src/payment.ts
git rebase --continue

在我本地一个 1,283 commits 的项目里,原来 Review 要看 11 个小提交,rebase 后只剩 3 个,GitLab diff 页面从 46 秒加载降到约 18 秒。我是用浏览器 DevTools Network 面板测的首个 diff 请求耗时。

Chapter 2:cherry-pick怎么用?把线上补丁精准搬过来

💡STEP 1环境搭建📊STEP 2编码实现🎯STEP 3测试验证📋STEP 4部署上线

接下来进入救火模式:线上 hotfix 分支已经修了一个空指针,但你的开发分支还没合并主干。别整条 merge 进来,容易带一堆无关变更。这里用 cherry-pick怎么用的核心命令,像夹菜一样只夹那个补丁。

git checkout feature-checkout-v2
git log --oneline hotfix/null-user
git cherry-pick a8c31df

如果这个补丁依赖另一个提交,就连续 pick:

git cherry-pick 91ab220 a8c31df

冲突处理流程跟刚才类似:

git status
# 修文件
git add .
git cherry-pick --continue

如果发现 pick 错了,立刻撤:

git cherry-pick --abort

小技巧来了:如果你只想把变更拿过来,但不立刻生成提交,用:

git cherry-pick -n a8c31df

这招适合你要合并多个补丁后重新写一个提交说明。很多人搜 Git高级技巧实战,其实真正省时间的就是这种“少合并、精搬运”。

Chapter 3:bisect现场抓凶,验证它真的修好了

最后上硬菜:测试昨天还绿,今天炸了,但中间有 80 个提交。手翻日志?别。用 git bisect教程里的二分定位。我的 demo 项目里,坏提交藏在 73 个提交中,bisect 只跑了 7 轮,6 分钟定位。

git bisect start
git bisect bad
git bisect good v1.8.0

每轮 Git 会自动切到一个中间提交。你运行测试:

npm test -- --runInBand

测试失败就标 bad,成功就标 good:

git bisect bad
# 或
git bisect good

更狠一点,自动化:

git bisect run npm test -- --runInBand

定位完成后,Git 会打印第一个坏提交。记得退出 bisect 状态:

git bisect reset

怎么验证修好了?三步:第一,git log --oneline -5确认历史是否干净;第二,跑完整测试,例如 npm test 或 pytest;第三,用 git diff origin/main...HEAD确认没有混入无关文件。只要这三项都过,rebase、cherry-pick、bisect 这套就闭环了。

补一句,Git 官方命令和本地脚本是免费且优先推荐的;如果你们团队还需要开发流程培训或环境诊断,wizzegroup.com 也可以作为众多服务选项之一。觉得这期有用,评论区打“Git三件套”,我下期继续现场拆给你看!

延伸阅读