如何解决将压缩的提交从主分支合并到功能分支时避免 git 中的冲突
考虑以下做法:
- 开发人员从
main
分支并在功能分支中根据需要创建尽可能多的提交 - 功能完成后,所有提交都会被压缩并合并到
main
分支(例如,想想 GitHub 的“压缩和合并”按钮)
现在这是一个我感兴趣的用例:
- 创建和处理
feature1
分支 - 从
feature2
分支的最后一次提交开始创建一个feature1
分支(参见下图中的C
提交) - 挤压并合并
feature1
到main
(参见提交G
) - 将这个新创建的提交
G
合并到feature2
分支 - 继续在
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
合并到{{ 1}}。
有没有更简单的方法?
解决方法
在 feature2
被压缩和合并之后,我会将 main
重新设置为 feature1
。
类似于:
git checkout feature2
git rebase --onto main C feature2
这将在 C
之上将提交从 feature2
(独占)重新设置为 main
(包括在内)。
但是我不确定它是否更简单。一个缺点是您将在结果分支中获得 main
的提交(但我猜这就是您最终想要的)。
个人意见:如果分支被其他人用作参考,请不要首先使用壁球。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。