代码之家  ›  专栏  ›  技术社区  ›  Christoph Schiessl Joeyjoejoejr

如何在单个存储库中组合来自两个不同存储库的两个分支?

git
  •  47
  • Christoph Schiessl Joeyjoejoejr  · 技术社区  · 16 年前

    我的Git存储库的结构如下:

    A-B-C-D-E-F   # master branch in separate repo1
    A-B-C-D-E-G-H # master branch in separate repo2
    

    A-H是简单的承诺。如您所见,存储库是相关的(repo2是repo1的分支)。我试图将这两个存储库合并为一个。

    之后,单个存储库应该具有以下结构:

    A-B-C-D-E-F   # master branch of previous repo1
            \
             \
              G-H # master branch of previous repo2
    

    我已经花了很多时间阅读Git用户指南等。然而,这个(特殊)使用案例似乎没有被记录在任何地方。

    3 回复  |  直到 6 年前
        1
  •  72
  •   Peter Burns    6 年前

    您可以将同一文件系统上的另一个Git存储库视为远程报告。

    首先,请执行以下操作:

    git remote add <name> /path/to/other/repo/.git
    git fetch <name>
    git branch <name> <name>/master #optional
    

    现在它们都是单个存储库中的分支。您可以使用git签出在它们之间进行切换、使用git合并进行合并等。

        2
  •  7
  •   Jim Puls    16 年前

    您的图片表明,您并不真正希望“组合两个存储库”,而是将g和h提交到repo1。您应该能够做一些简单的事情,比如将repo2作为远程设备添加到repo1并获取/拉入更改。

        3
  •  4
  •   Your Common Sense    16 年前

    我认为吉姆是对的。还要记住,如果两个提交对代码执行完全相同的补丁/diff,那么它们将具有完全相同的sha1哈希。因此,A到E在两个回购协议中应该有相同的sha1,因此从一个到另一个合并,并保持合并的回购协议作为唯一的回购协议向前推进不应该是一个问题。

    您可以在repo1上为repo2设置跟踪分支,然后以这种方式保持它们的不同,并将合并延迟到您想要的任何时候。