如何git-将两个不同的分支并排合并为一个分支?

How to git-merge two diverged branches side-by-side into one branch?

我有两个 git 分支,它们从一个共同的提交中分离出来,比如分支 A 和分支 B:

      -- a -- a' -- a'' (branch A)
    /
-- o -- b -- b' -- b'' (branch B)

提交 a''b'' 都包含许多类似的文件,但现在用于不同的应用程序。我想将两个文件结构都保留在 a''b''.

现在,我想通过将 B 的内容添加到 A 的子目录中来合并两者。

示例情况是提交 o 中的 script.py,其中包含 print ('original')。在分支 A 中,文件在一系列提交中更改为 print ('some feature A');在分支 B 中,文件也会在某些提交中更改为 print ('another feature B')

我现在怎么会在我拥有文件的分支中结束

script.py   (from A)
B/script.py   (from B)

分别以print ('some feature A')print ('another feature B')为内容?

注意:我想保留 A 版本 script.py 和 B 版本 B/script.py 案例的增量历史记录,以便能够 git blame 任一文件。

我想你想要的是git subtree。特别是,此命令将完全按照您的描述执行。

git subtree --prefix=B B

假设您 运行 在分支 A 中执行此命令,它将创建一个子目录 B,整个代码库都存在于分支 B 中。历史将被保留并添加前缀,图形将如下所示(m 用于合并提交)。

-- o -- a -- a' -- a'' -- m (branch A)
    \                    /
      - b -- b' -- b'' -   (branch B)