rebase 时遇到冲突怎么解决才不会搞乱提交历史?
我用 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'
你遇到的多个冲突是因为 rebase 是把你的每个提交逐个"重放"到 main 上,每个提交都可能跟最新的 main 有冲突。所以解决一个,下一个又冒出来,这很正常。
正确姿势是这样的。首先,冲突出来后,打开那个
src/utils/formatDate.js文件,找到类似这样的冲突标记:手动改成你想要的结果,把那些 <<<<<<< ======= >>>>>>> 标记全删掉。
然后执行
git add src/utils/formatDate.js,注意尽量别用git add .,万一加进去了不该加的调试代码或者 IDE 配置文件,后面排坑很痛苦。接着
git rebase --continue继续下一个提交。如果又冲突了,重复上面步骤,直到全部搞定。实在搞砸了想重来,
git rebase --abort直接放弃,回到 rebase 之前的状态,这是个保命招。另外说一句,如果冲突实在太多太乱,可以考虑用
git rebase -i main先把一些小提交合并一下,或者干脆放弃 rebase 改用 merge,虽然历史没那么干净,但能省不少头发。WP里面改主题和插件的时候经常遇到这情况,习惯就好。