我需要将两个代码库合并,但不能丢失它们的历史记录。我在多个论坛上搜索了解决方案,但没有一个能够提供完整的解决方案。通过采用来自不同来源的多个步骤,我成功地将两个独立的代码库合并成一个代码库,并保留它们的历史记录。
有几个其他答案涉及合并分支或仅提供不完整的说明/步骤。
Original Answer翻译成"最初的回答"
我需要将两个代码库合并,但不能丢失它们的历史记录。我在多个论坛上搜索了解决方案,但没有一个能够提供完整的解决方案。通过采用来自不同来源的多个步骤,我成功地将两个独立的代码库合并成一个代码库,并保留它们的历史记录。
有几个其他答案涉及合并分支或仅提供不完整的说明/步骤。
Original Answer翻译成"最初的回答"
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中拥有合并的主分支。如果您确信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
我相信这篇文章对其他人应该会有所帮助。
deleteme.txt
的文件,然后保留提交和文件在合并的结果中。这还将两个无关的历史记录与第三个仓库组合在一起,这与问题本身不符,该问题仅提到了两个(而不是三个)输入仓库。最后,它仅合并master
分支,而三个仓库都可能有多个分支。但这不是一个*错误的答案:它确实将这三个不同的历史记录联系在一起。 - undefined