Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在两个不同的分支树之间共享新的git分支?_Git_Merge_Branch_Cherry Pick - Fatal编程技术网

如何在两个不同的分支树之间共享新的git分支?

如何在两个不同的分支树之间共享新的git分支?,git,merge,branch,cherry-pick,Git,Merge,Branch,Cherry Pick,我有一个回购协议,其中我有两个主要分支(一个是标准产品的定制版本,另一个是标准产品)。它们共享大约90-95%的代码,但它们之间存在重大差异 创建可以合并到这两个分支中的新功能的最佳方法是什么 到目前为止,我已经从一根或另一根主枝开始了一个新的分枝,然后把樱桃摘到了另一根……但这开始让我感到痛苦。而git树看起来像sh!t:( 如果我合并这些分支,接收分支将被破坏,并且会有大量冲突,这就是为什么我一直使用cherry pick 像这样的事情有好的工作流程吗?一定有更好的方法。 我之所以有这两个主

我有一个回购协议,其中我有两个主要分支(一个是标准产品的定制版本,另一个是标准产品)。它们共享大约90-95%的代码,但它们之间存在重大差异

创建可以合并到这两个分支中的新功能的最佳方法是什么

到目前为止,我已经从一根或另一根主枝开始了一个新的分枝,然后把樱桃摘到了另一根……但这开始让我感到痛苦。而git树看起来像sh!t:(

如果我合并这些分支,接收分支将被破坏,并且会有大量冲突,这就是为什么我一直使用cherry pick

像这样的事情有好的工作流程吗?一定有更好的方法。
我之所以有这两个主要分支,是因为几乎所有的代码都是相同的,但主要分支之间存在微小但显著的差异。

先假设一个永久分支比另一个“新”,比如新特性分支F和bug修复分支B。(如果其中一个分支的唯一代码多于另一个分支,请为此将其称为F,以最大限度地减少在两个方向合并的需要。)然后,如果一项更改同时应用于,根据定义,这将是一个bug修复,因此您可以将其应用于B,然后将B合并到F中,解决由于新功能更改了相关代码而产生的任何冲突

这个模型在这里也适用(特别是如果几乎所有的新更改都适用于这两个版本,并且可以先在B上进行),但有一个问题:第一次合并时,您将尝试将F和B之间所有不必要的差异都合并到F中。因此,先进行一次合并:将B合并到F中,但实际上根本不更改F。然后只对B进行新建操作(即,您所询问的“新特性”)符合合并条件,这是您想要的

可以按如下方式创建假合并(仅使用跨平台shell功能):

#使用假合并消息创建cmt

git commit tree F:-p F-p B这些分支是否打算在将来某个时候再次合并?很可能不会。它们几乎肯定会有一些不同。这听起来真的像是找出如何处理带有单个分支的变体是一件值得努力的事情。例如,使用instanc的构建时配置来处理差异e、 这听起来很有趣!但我不明白=)我必须做一些测试,看看会发生什么。
# create cmt with a message for the fake merge
git commit-tree F: -p F -p B <cmt
# use the hash it prints below
git checkout F
git merge $HASH