【问题标题】:Howto share new git branches between two different branch trees?如何在两个不同的分支树之间共享新的 git 分支?
【发布时间】:2020-06-18 04:44:45
【问题描述】:

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

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

到目前为止,我已经从一个或另一个主要分支开始了一个新分支,然后将樱桃采摘到另一个......但它开始变得很痛苦。 git 树看起来像 sh!t :(

如果我合并分支,接收分支将被损坏并有大量冲突,这就是我一直使用cherry-pick的原因。

对于这样的事情有很好的工作流程吗?一定会有更好的办法。 我有两个主要分支的原因是因为几乎所有代码都是相同的,但主要分支之间存在细微但重要的差异。

【问题讨论】:

  • 这些分支是否打算在未来某个时候再次合并?
  • 很可能没有。它们几乎肯定会有一些差异。
  • 这听起来真的很像弄清楚如何处理单个分支的变体将是值得努力的事情。 IE。例如处理构建时间配置的差异。

标签: git merge branch cherry-pick


【解决方案1】:

假装一个永久分支比另一个“更新”——就像一个新功能分支F vs.一个错误修复分支。 (如果您的一个分支的唯一代码比另一个多,则将其称为 F 以最大程度地减少双向合并的需要。)然后,如果更改应用于 both,根据定义,这将是一个错误修复,因此您将其应用于 B,然后将 B 合并到 F,解决任何问题由于新功能更改了相关代码而产生的冲突。

这个模型在这里也可以工作(尤其是如果几乎所有的新更改都适用于两个版本并且可以首先在 B 上进行),但是有一个问题:first合并时,您将尝试将 FB 之间所有不需要的差异带入 F。所以先做一个 fake 合并:将 B 合并到 F 但实际上根本不改变 F。那么只有 B 上的 工作(ie,您询问的非常“新功能”)有资格被合并,这就是您想要。

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

# 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

合并将是一个快进,因为commit-tree 是基于F

【讨论】:

  • 这听起来很有趣!但我不明白 =) 我将不得不做一些测试看看会发生什么。
猜你喜欢
  • 1970-01-01
  • 2019-02-07
  • 2021-08-24
  • 1970-01-01
  • 2022-11-03
  • 2020-04-03
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
相关资源
最近更新 更多