以两个版本作为分支的Git

以两个版本作为分支的Git,git,synchronization,software-product-lines,Git,Synchronization,Software Product Lines,我有一个有两个不同版本的项目。每个版本位于另一个分支上,它们永远不会合并在一起。大多数代码是相等的,但每个分支都有其独特的部分。现在我需要将几乎所有的提交都放到这两个分支中 目前,我使用cherry picking实现这一点:我切换到另一个分支,并选择所有需要的提交 我不喜欢我这样做。挑选每一个承诺都需要一些时间,你的“我”可能会错过一个 如何在不丢失唯一更改的情况下保持两个几乎相等的分支同步 我读过几篇关于类似主题的帖子,但似乎没有一篇适合我的情况: 我也读过这篇文章,但也没有找到合

我有一个有两个不同版本的项目。每个版本位于另一个分支上,它们永远不会合并在一起。大多数代码是相等的,但每个分支都有其独特的部分。现在我需要将几乎所有的提交都放到这两个分支中

目前,我使用cherry picking实现这一点:我切换到另一个分支,并选择所有需要的提交

我不喜欢我这样做。挑选每一个承诺都需要一些时间,你的“我”可能会错过一个

如何在不丢失唯一更改的情况下保持两个几乎相等的分支同步

我读过几篇关于类似主题的帖子,但似乎没有一篇适合我的情况:


我也读过这篇文章,但也没有找到合适的解决方案。热修复分支最接近,我曾考虑创建一个分支,但我认为合并将覆盖内容。

一种常见做法是根据最适合开发特定主题/功能/错误修复的分支为增量更改创建主题分支。然后主题分支合并到两个分支中并被丢弃。合并不会覆盖您的历史记录,相反,它将全部保存在那里

                    /-- * -- * -- * -- A
*-- old history -- * 
                    \-- * -- * -- * -- * -- B
正如您所描述的,假设
A
B
将来永远不会合并。当您需要添加一个功能时,您可以选择a或B,以适合该特定情况的更自然的为准,并在那里进行开发:

                                   /-- * -- * -- * -- C
                    /-- * -- * -- * -- A
*-- old history -- * 
                    \-- * -- * -- * -- * -- B
然后将C合并到A和B并丢弃:

                                   /-- * -- * -- * -- C --\
                    /-- * -- * -- * ----------------------*[merge] -- A
*-- old history -- * 
                    \-- * -- * -- * -- ..               --*[merge] -- B
(我错过了向亨利·马蒂斯学习艺术的机会。)

这里有一点非常简单:

$ git checkout A
$ git branch C
$ git checkout C
$ develop.sh 24h commit commit commit
$ git checkout A
$ git merge C
$ git checkout B
$ git merge C
$ git branch --delete C
通过现在运行,您应该能够看到更好的ASCII艺术: $git log--oneline--graph
你会发现合并并没有破坏你的任何历史。当然,您不需要这个图形,它也可以通过普通的
git log
看到

分支的区别是什么,即它们独特部分的性质是什么?是否可以只使用一个分支,但使用静态配置来选择要包含的零件或特征?到目前为止,我还不认为维护两个分支是最好的解决方案。我建议使用第三个分支(称为
common
或其他什么分支),它包含两个开发行中始终相同的所有部分,然后使其他两个分支仅与不同的部分有关。然后,您可以周期性地将公共分支合并到每个单独的行中(如果愿意,也可以重新设置基址)。。。