2

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

目前我为此使用樱桃采摘:我切换到另一个分支并选择我需要的所有提交。

我不喜欢我这样做的方式。选择每一个提交都需要一些时间,而你的我可能会错过一个。

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

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

我还阅读了这个不错的 git 分支指南,但我也在这里找不到合适的解决方案。修补程序分支最接近,我想创建一个,但我认为合并会覆盖东西。

4

1 回答 1

1

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

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

正如您所描述的,假设是A并且B将来永远不会合并。当您需要添加一个功能时,您可以选择 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

现在运行: $ git log --oneline --graph 您应该能够看到更好的 ASCII 艺术作品 您会看到合并并没有破坏您的任何历史记录。当然,您不需要 --graph 为此,它也可以通过 plain 看到git log

于 2013-12-18T12:21:17.043 回答