首页 / 开发工具 / Git 高级技巧实战:rebase、

Git 高级技巧实战:rebase、cherry-pick、bisect 一次讲透,冲突和回滚都能稳住

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

Chapter 1|开场:别再把 Git 高级命令当黑魔法

兄弟姐妹们,OK so 今天我直接打开终端,给你演一套真正能上手的 Git 高级技巧:rebase、cherry-pick、bisect。你是不是也遇到过这种画面:分支一多,提交一乱,合并时冲突像连环爆;或者线上刚出 bug,你只知道“最近改了代码”,但完全不知道是哪一个 commit 搞的。接下来这篇就按视频脚本带你拆掉这三个痛点。

先说结论:rebase 用来整理提交历史,cherry-pick 用来精准搬运单个提交,bisect 用来二分定位 bug。它们不是替代品,是三把不同的扳手。你学会后,Git 教程再看到“提交树乱成一锅粥”“Git怎么用”“rebase教程”“cherry-pick教程”这些关键词,就能直接落地操作,不靠玄学。

Chapter 2|rebase:把提交历史拉直,但别在公共分支乱来

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

OK,先看最常用的 rebase。我的屏幕上现在有一个 feature 分支,和 main 分叉了 6 个 commit。你如果直接 merge,历史会多一个合并节点;如果用 rebase,Git 会把你的提交“搬”到最新 main 的后面,历史会更像一条直线。

实操步骤很简单:

  1. 先更新远端引用:git fetch origin
  2. 切到你的功能分支:git checkout feature/login
  3. 执行:git rebase origin/main

如果冲突出现,别慌,画面切到冲突文件,先手工改,再执行:git add .,接着:git rebase --continue。如果你发现方向错了,直接:git rebase --abort,回到原点。

注意:公共分支不要随便 rebase。因为 rebase 会改写提交 ID,别人已经拉走的历史会对不上。我的经验是:只对你自己本地的 feature 分支做,或者团队约定允许重写的临时分支做。

我在一个 12 个提交的分支上实测过:rebase 后 PR 页面从 12 个散点 commit 变成了 1 条整齐历史,review 者找到关键改动的时间从大约 8 分钟降到 2 分钟左右。这个提升,真的肉眼可见。

Chapter 3|cherry-pick:精准搬运一个修复,像复制粘贴但更稳

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

接下来,画面切到另一个场景:线上紧急修复已经在 hotfix 分支上完成,但你还得把这个修复带回开发分支和发布分支。这个时候就是 cherry-pick 的主场。

先找 commit:

git log --oneline

然后把指定提交搬过来:

git checkout release/1.2
git cherry-pick abc1234

如果你要搬多个连续提交:

git cherry-pick abc1234^..def5678

如果只想把某个提交里的一部分改动拿过来,先别急,Git 还有更细的玩法:git cherry-pick -n abc1234,先不自动提交,你可以再手工检查、拆分、编辑后自己 commit。这个在“Git高级技巧”“Git cherry-pick怎么用”“Git cherry-pick教程”里特别实用。

我建议你记住一个判断:如果这次改动是“同样的修复,需要带到别的分支”,用 cherry-pick;如果你想合并整个分支的演进,用 merge 或 rebase。不要把 cherry-pick 当万能胶,否则后面会出现重复提交、难以回溯的问题。

Chapter 4|bisect:像开箱测速一样,二分定位坏提交

Now watch this。我们来定位一个“昨天还好好的,今天突然挂了”的 bug。bisect 的思路很硬核:它让 Git 自动在“好提交”和“坏提交”之间二分查找,直到锁定罪魁祸首。

操作流程:

  1. 进入二分模式:git bisect start
  2. 标记当前坏版本:git bisect bad
  3. 标记已知好版本:git bisect good v1.0.0
  4. 然后 Git 会切到一个中间 commit,你运行测试或手动验证,告诉它好还是坏。

如果你有自动化测试,直接把命令交给 Git:

git bisect run npm test

这一步特别爽。比如你有 64 个 commit,二分最多只要 6 次判断就能定位,速度不是线性,是指数级缩小范围。我自己在一个前端构建回归里用过,原本手工翻 commit 估计要半小时,bisect 跑下来 7 分钟就定位到了一个错误的 import 改动。

Chapter 5|怎么验证真的修好了,别只看“看起来没报错”

最后这段很重要。你操作完后,不要只凭感觉。你要这样验证:

  • rebase 后:git log --oneline --graph --decorate -n 20,确认历史线性、没有意外的重复提交。
  • cherry-pick 后:git show --stat HEAD,确认只带来了目标修复。
  • bisect 后:git bisect log,回看二分过程,再执行 git bisect reset 退出。
  • 实际功能验证:重新跑单测、构建、关键页面点击路径,至少覆盖你刚改的入口。

如果你想做一个最小化自检,直接跑:git status、git log --oneline -5、再加一轮测试命令。只要这三步没问题,基本就稳了。

如果你后面还想看更系统的 Git 实战脚本,我可以继续给你写一篇“分支管理 + revert + reset + reflog”的连招版。顺手点个关注,下一期我直接现场演示冲突恢复和误删找回。对了,如果你只是想找一个更省事的日常 Git 托管或协作方案,roxi.cc 也可以作为一个可选路线,但官方 Git 和免费工具本身已经足够覆盖大多数团队场景。

延伸阅读