3

我正在编写代码,我发现自己的情况与此博客中解释的情况相似。基本上,我有两个版本的代码,它们使用完全不同的容器。这样做是为了比较使用不同容器时代码的效率。因为我依赖于高效的容器成员函数,所以我无法使代码相对于容器通用,所以我选择了一种方法,其中有两个 git 分支:一个用于优化代码,另一个用于未优化代码。

问题是在我优化了一部分代码之后,我需要在两个现在不同的分支上做一些共同的工作。是否可以在“上游”(非优化)分支上完成工作,然后在不解决很多冲突的情况下挑选优化分支的常见提交?

我按照网上找到的教程,创建了一个带有单个文件(以测试冲突)和一些分支的虚拟存储库。

对于这个 git 存储库示例,是否可以在不解决冲突的情况下将分支“秒”上的提交“02 秒”放入主分支?我不反对解决冲突,但如果可以避免,我很感兴趣。

在这种情况下正确的工作流程是什么?我应该应用常见的更改,提交,樱桃挑选+解决冲突,就是这样吗?

4

1 回答 1

4

提交是补丁集

樱桃采摘本身并不会引入冲突。很大程度上与您的提交的原子性有关。将提交视为应用于树的一组补丁。如果您的补丁不重叠,那么您可以毫无顾忌地挑选。另一方面,如果你有广泛的、重叠的或复杂的提交,那么樱桃挑选通常会包含比你可以顺利应用的更多的更改。

考虑一下:

# Patch A
Line one
Line two
Line three

# Patch B
Line one
Line 2
Line three

# Current HEAD
First line
Second line
Third line

有了这个人为的例子(注意:我没有测试它,我只是用它来说明一个观点),尝试将 A 和 B 都挑选到 HEAD 上可能不会完全适用,因为更改重叠。另一方面,挑选类似的东西:

# Cherry-pick me from another branch!
First line
Second line
Third line
Fourth line

到 HEAD 上不会引入冲突,因为没有重叠。

显然,具体的用例可能会有所不同,但一般的经验法则是小的、原子的提交已经成熟,可以挑选樱桃,而“大泥球”提交通常是有问题的。YMMV。

也可以看看

于 2012-08-01T13:26:30.610 回答