我有一个分支结构如下。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时,它会合并冲突。在合并冲突中,是来自提交e
和f
的代码,我想这在技术上是有意义的,因为它是对整个文件状态的选择,但使选择提交更加困难。
我尝试将提交h
保存为补丁,但由于冲突,它不会应用于d
。我先试着在main
上重定feature2
的基,但也有同样的问题。底线是:当我查看h
的差异时,我看到的差异正是我想应用于d
的差异。因为存在合并冲突,所以感觉就像e
和f
的历史被带入h
的樱桃采摘中。如果我能以某种方式提取h
在f
上的差异,并将其应用于d
,这将是我试图做的更多。
1条答案
按热度按时间mbskvtky1#
这种冲突意味着
h
中的更改建立在e
和f
中的更改之上。由于e
和f
不在main中,因此h
不能干净地应用。h
和e
+f
之间存在明显的依赖关系,这就是冲突告诉您的。如果两个特征,特征1和特征2在概念上/语义上是独立的,使得任何一个都可以在没有另一个的情况下存在,则冲突意味着实现在文本上交错或耦合,并且不能自动分离(例如,一个子例程实现两个不同的特征)。你需要解决冲突。当您最终将Feature 1合并到main中时,您将遇到另一个冲突。
这种冲突看起来像是一种痛苦,但它说明了代码的质量,即不同的功能没有很好地分离。重写一遍