当稍后的提交解决冲突时,如何避免在变基期间发生冲突?

How do I avoid a conflict during rebase when a later commit resolves the conflict?

如何在 git 中的 rebase 结束时轻松地 rebase 具有冲突的分支?

例如,我在一个功能分支上,master 分支中有 2 个提交用于 rebase。
第一次提交会发生冲突,但如果 rebase 将两个提交连接在一起,则第二次提交后不会发生冲突。
那么如何将它作为一个整体进行变基,而不是逐一变基并解决两次冲突呢?

我想应该在某处有答案,但我找不到任何东西,因为所有类似的问题标题都含糊不清。

最好的方法是先压缩两个提交(通过使用 interactive rebase)然后在 master 上 rebase。

  1. 通过交互式 rebase 压缩最后 2 次提交:

    git rebase -i head~2
    

    为第二次提交选择压缩(或修正)

  2. 然后基于 master

    git rebase master
    

你应该 squash the commits 有问题 变基到 master 之前。通过对最近的共同祖先进行交互式变基来执行此操作:

git rebase -i $(git merge-base master HEAD)

这样,组合的提交,当表示为补丁时,可以干净地应用于 master

git rebase master

您尝试应用到 master 的原始第一次提交将发生冲突,这很简单。一旦完成,您必须能够检查 "state",因此 Git 让您解决冲突。你的基本问题归结为 "how can I apply a patch that contains a conflict without creating a conflict," 你显然做不到。通过首先压缩提交,您无需应用冲突的提交。