我需要在不丢失任何一个历史的情况下合并两个存储库。我搜索了几个论坛,但没有一个可以提供完整的解决方案。在执行了从各种来源采取的几个步骤之后,我可以设法加入缺失的点并将两个单独的存储库合并到一个存储库中,并且它们的历史记录完好无损。
还有其他几个关于合并分支的答案,或者只是没有完整的说明/步骤。
如果两个存储库都在您的机器上,例如您有文件夹
A/.git
A/client-src
B/.git
B/server-src
只需转到其中之一:
cd A
并输入:
git remote add repo-b ../B
这将创建一个从 repo-a 到 repo-b 的符号链接(“repo-b”只是一个符号名称,你可以选择任何你想要的)然后
git fetch repo-b
将结合两个回购。此时,您将在一个存储库中拥有两个历史记录,但仍位于不同的分支中。分支“master”(您所在文件夹的主目录)将包含客户端代码。分支“repo-b/master”将包含服务器代码。
然后你只需要合并两者:
git merge repo-b/master --allow-unrelated
在此之后,您将在 Repo A 中拥有一个合并的 master 分支。如果您确定 Repo B 中没有其他有意义的信息(标签、其他分支),您可以丢弃它并继续使用 Repo A。这两个历史记录都将保持不变。
为了完整起见,您应该最终删除从 Repo-A 到 Repo-B 现在无用的链接:
git remote remove repo-b
以下是步骤
git clone <NEW REPO>
cd <NEW REPO FOLDER>
dir > README.MD --> this step is just to initiate the new repository.
git commit -m "initiate the new repository"
git remote add -f <RANDOM NAME A> <OLD BRANCH A>
git remote add -f <RANDOM NAME B> <OLD BRANCH B>
git pull origin master --allow-unrelated-histories
git push -u origin master
git merge --allow-unrelated <RANDOM NAME A>/master
git merge --allow-unrelated <RANDOM NAME B>/master
git push origin master
我相信这篇文章应该对其他人有所帮助。