如何合并两个 git 存储库而不丢失任一存储库的历史记录

Nit*_*uri 4 git github git-repo

我需要合并两个存储库而不丢失其中任何一个的历史记录。我搜索了几个论坛,但没有一个能提供完整的解决方案。在执行了从不同来源采取的几个步骤后,我可以设法连接缺失的点,并将两个单独的存储库合并到一个存储库中,并且它们的历史记录完好无损。

还有其他几个答案谈论合并分支或只是没有完整的说明/步骤。

Mar*_*cus 8

如果两个存储库都在您的计算机上,例如您有文件夹

A/.git
A/client-src

B/.git
B/server-src
Run Code Online (Sandbox Code Playgroud)

只需转到其中之一即可:

cd A
Run Code Online (Sandbox Code Playgroud)

并输入:

git remote add repo-b ../B
Run Code Online (Sandbox Code Playgroud)

这将创建一个从 repo-a 到 repo-b 的符号链接(“repo-b”只是一个符号名称,您可以选择任何您想要的名称),然后

git fetch repo-b
Run Code Online (Sandbox Code Playgroud)

将合并两个存储库。此时,您将在一个存储库中拥有两个历史记录,但仍位于不同的分支中。分支“master”(您所在文件夹的主分支)将包含客户端代码。分支“repo-b/master”将包含服务器代码。

然后你只需要将两者合并:

git merge repo-b/master --allow-unrelated
Run Code Online (Sandbox Code Playgroud)

之后,您将在 Repo A 中拥有一个合并的主分支。如果您确定 Repo B 中没有其他有意义的信息(标签、其他分支),您可以丢弃它并继续使用 Repo A。两个历史记录都将完好无损。

为了完整起见,您最终应该删除从 Repo-A 到 Repo-B 的现在无用的链接:

git remote remove repo-b
Run Code Online (Sandbox Code Playgroud)