Git有两个版本作为分支

时间:2013-12-17 17:10:18

标签: git synchronization software-product-lines

我有一个包含两个不同版本的项目。每个版本都在另一个分支上,它们永远不会合并在一起。大多数代码都是相同的,但每个分支都有独特的部分。现在我需要几乎每个提交都进入两个分支。

目前我使用cherry pick:我切换到另一个分支并选择我需要的所有提交。

我不喜欢我这样做。选择每次提交需要一些时间,我可能会错过一次。

如何在不丢失唯一更改的情况下保持两个大致相同的分支同步?

我已经阅读了几篇关于类似主题的帖子,但似乎没有一个适用于我的情况:

我也读过这个nice git branch guide但我也看不到合适的解决方案。修补程序分支最接近,我考虑创建一个,但我认为合并将覆盖东西。

1 个答案:

答案 0 :(得分:1)

通常的做法是根据最适合开发特定主题/功能/ bugfix的分支为您的增量更改创建主题分支。然后主题分支合并到您的两个分支并被丢弃。合并不会覆盖你的历史,相反,它将全部存在,完全保留。

                    /-- * -- * -- * -- A
*-- old history -- * 
                    \-- * -- * -- * -- * -- B

正如您所描述的那样,假设AB将来永远不会合并。当你需要添加一个特征时,你选择A或B,对于那个特定情况更自然,并在那里发展:

                                   /-- * -- * -- * -- C
                    /-- * -- * -- * -- A
*-- old history -- * 
                    \-- * -- * -- * -- * -- B

然后将C合并到A和B并丢弃它:

                                   /-- * -- * -- * -- C --\
                    /-- * -- * -- * ----------------------*[merge] -- A
*-- old history -- * 
                    \-- * -- * -- * -- ..               --*[merge] -- B

(我错过了从Henri Matisse那里学习ASCII艺术课程的机会。)

这是非常简单的事情:

$ 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 你会发现合并并没有破坏你的任何历史。当然,你不需要--graph,只有普通的git log才能看到它。