将压缩的提交从主分支合并到功能分支时避免 git 中的冲突

Avoiding conflicts in git when merging a squashed commit from main into feature branch

考虑以下做法:

现在这是一个让我感兴趣的用例:

  1. 创建并处理 feature1 分支
  2. feature1 分支的最后一次提交开始创建一个 feature2 分支(参见下图中的 C 提交)
  3. 压缩并合并 feature1main(参见提交 G
  4. 将这个新创建的提交 G 合并到 feature2 分支
  5. 继续 feature2 分支

换句话说,在步骤 4 中将 G 合并到 feature2 分支如下所示:

user@host:~/repo (main)$ git checkout feature2
user@host:~/repo (feature2)$ git merge main     # merge G into feature2

通常,此合并(请参阅提交 H)会导致许多合并冲突。

如何彻底消除这些冲突?

我能想到的最简单的解决方案如下(见下图):

user@host:~/repo (main)$ git checkout feature1
user@host:~/repo (feature1)$ git merge main         # merge G into feature1; essentially, an empty commit
user@host:~/repo (feature1)$ git checkout feature2
user@host:~/repo (feature2)$ git merge feature1     # merge G' into feature2

换句话说,我们不是直接将G合并到feature2,而是先将G合并到feature1,然后再将feature1合并到feature2.

有没有更简单的方法?

feature1 被压缩和合并之后,我会将 feature2 变基到 main

类似于:

git checkout feature2
git rebase --onto main C feature2

这将在 main.

之上将提交从 C(不包括)变基到 feature2(包括)

但是我不确定它是否更简单。一个缺点是您将在结果分支中获得 main 的提交(但我猜这就是您最终想要的)。

个人意见:如果该分支被其他人用作参考,请不要使用壁球。