git 当cherry picking一个提交时,在解决合并冲突时,有什么方法可以避免包括分支历史吗

zc0qhyus  于 2023-09-29  发布在  Git
关注(0)|答案(1)|浏览(111)

我有一个分支结构如下。3个分支机构。

a - b - c - d  *main*
     \
      e - f    *feature1*
           \
            h  *feature2*

Feature1和Feature2在技术上是完全独立的。我只是想用feature1代码测试feature2。但是计划的改变意味着我需要在把feature1放进去之前把feature2放进main。
因此,目标是在main上将h挑选为d
这就是我的困惑。当我在像Fork这样的查看器中查看diff时,diff非常干净。事实上,这正是我想樱桃采摘。当我查看commit h中的更改时,只显示了行的更改。
问题是,当我转到main并尝试在h中进行cherry pick时,它会合并冲突。在合并冲突中,是来自提交ef的代码,我想这在技术上是有意义的,因为它是对整个文件状态的选择,但使选择提交更加困难。
我尝试将提交h保存为补丁,但由于冲突,它不会应用于d。我先试着在main上重定feature2的基,但也有同样的问题。底线是:当我查看h的差异时,我看到的差异正是我想应用于d的差异。因为存在合并冲突,所以感觉就像ef的历史被带入h的樱桃采摘中。如果我能以某种方式提取hf上的差异,并将其应用于d,这将是我试图做的更多。

mbskvtky

mbskvtky1#

这种冲突意味着h中的更改建立在ef中的更改之上。由于ef不在main中,因此h不能干净地应用。
he + f之间存在明显的依赖关系,这就是冲突告诉您的。
如果两个特征,特征1和特征2在概念上/语义上是独立的,使得任何一个都可以在没有另一个的情况下存在,则冲突意味着实现在文本上交错或耦合,并且不能自动分离(例如,一个子例程实现两个不同的特征)。你需要解决冲突。当您最终将Feature 1合并到main中时,您将遇到另一个冲突。
这种冲突看起来像是一种痛苦,但它说明了代码的质量,即不同的功能没有很好地分离。重写一遍

相关问题