rebase 时遇到冲突怎么解决才不会搞乱提交历史?

A. 若惜 阅读 24

我用 git rebase main 把 feature 分支往主干上 rebase,结果中途弹出好多冲突。我改完文件后执行了 git add .git rebase --continue,但感觉提交顺序有点乱,是不是哪里操作错了?

比如下面这个冲突场景,我改完之后继续 rebase,但后续又冒出新的冲突,搞得我不敢继续了:

CONFLICT (content): Merge conflict in src/utils/formatDate.js
error: could not apply abc1234... feat: add date formatting helper
hint: Resolve all conflicts manually, then run 'git rebase --continue'
我来解答 赞 3 收藏
二维码
手机扫码查看
1 条解答
程序员文婷
你这操作流程其实没问题,别慌。rebase 遇到冲突是家常便饭,特别是 feature 分支跑了好几天、main 分支又有人合并了新代码的时候。

你遇到的多个冲突是因为 rebase 是把你的每个提交逐个"重放"到 main 上,每个提交都可能跟最新的 main 有冲突。所以解决一个,下一个又冒出来,这很正常。

正确姿势是这样的。首先,冲突出来后,打开那个 src/utils/formatDate.js 文件,找到类似这样的冲突标记:

<<<<<<< HEAD
// main 分支的代码
const formatDate = (date) => { ... }
=======
// 你的代码
function formatDate(date) { ... }
>>>>>>> abc1234... feat: add date formatting helper


手动改成你想要的结果,把那些 <<<<<<< ======= >>>>>>> 标记全删掉。

然后执行 git add src/utils/formatDate.js,注意尽量别用 git add .,万一加进去了不该加的调试代码或者 IDE 配置文件,后面排坑很痛苦。

接着 git rebase --continue 继续下一个提交。如果又冲突了,重复上面步骤,直到全部搞定。

实在搞砸了想重来,git rebase --abort 直接放弃,回到 rebase 之前的状态,这是个保命招。

另外说一句,如果冲突实在太多太乱,可以考虑用 git rebase -i main 先把一些小提交合并一下,或者干脆放弃 rebase 改用 merge,虽然历史没那么干净,但能省不少头发。WP里面改主题和插件的时候经常遇到这情况,习惯就好。
点赞
2026-03-01 06:18