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

问题描述 投票:0回答:1

考虑以下做法:

  • 开发人员从
    main
    分支并在功能分支中根据需要创建尽可能多的提交
  • 功能完成后,所有提交都被压缩并合并到
    main
    分支(例如,想想 GitHub 的“压缩和合并”按钮)

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

  1. 创建并在
    feature1
    分支上工作
  2. feature2
    分支的最后一次提交开始创建一个
    feature1
    分支(参见下图中的
    C
    提交)
  3. 挤压并合并
    feature1
    main
    (见提交
    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

有更简单的方法吗?

git git-merge branching-and-merging git-merge-conflict git-squash
1个回答
2
投票

我会在

feature2
被压扁并合并之后将
main
变基到
feature1
上。

类似的东西:

git checkout feature2
git rebase --onto main C feature2

这将在

C
.
之上将提交从
feature2
(独占)变基到
main

(包含)

因此,不是将 main 合并到 feature2(红色)中,而是 feature2 移动到 main(绿色)之上。

但是我不确定它是否更简单。一个缺点是您将在结果分支中获得

main
的提交(但我猜这就是您最终想要的)。

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

© www.soinside.com 2019 - 2024. All rights reserved.