gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 05:59:19 27 4
gpt4 key购买 nike

考虑以下做法:

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

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

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

换句话说,在第 4 步中将 G merge 到 feature2 分支看起来是这样的:

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

merge conflicts after squash and merge

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

如何彻底消除这些冲突?

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

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

overcoming merge conflicts after squash and merge

换句话说,我们不是将G直接 merge 到feature2中,而是先将G merge 到feature1中> 然后将 feature1 merge 到 feature2 中。

有没有更简单的方法?

最佳答案

feature1 被压缩和 merge 之后,我会将 feature2 rebase 到 main 上。

类似于:

git checkout feature2
git rebase --onto main C feature2

这会将提交从 C(不包括) rebase 到 main 之上的 feature2(包括)。

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

个人意见:如果该分支被其他人用作引用,请首先不要使用 squash。

关于git - 将压缩的提交从 main merge 到功能分支时避免 git 中的冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68229841/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com