合并两个不同历史记录的仓库

4
我们最终得到了两个不同的repo,它们具有不同的历史,因为两个人分别开始了自己的repo,现在需要合并它们。 起始代码相同,只有两个不同的git init和remote。 所以条件是开发者D1开始了他的repo: start->A->B->C-> 开发者D2开始了他的repo: start->Z->Y->X-> 现在,希望有一个共同的分支供两个repo拉取,以便他们可以合并自己的分支进行新工作。 他们的工作大多是分离的,有少量冲突可以手动解决。 最好采用什么命令或过程?

可能是如何合并两个Git存储库?的重复问题。 - kowsky
初始的SDK是相同的。两者都希望有一个共同的分支,可以在本地合并,然后推送到共同的分支。 - coder007
可能是合并同一项目的两个git存储库的重复问题。 - phd
你得到了能帮助你解决问题的答案了吗? - Marina Liu
2个回答

11
我建议:
可以在D1的存储库或D2的存储库中完成:

对于D2方面

git remote add [name-for-D1-repo] [D1-repo-url]
git fetch --all
git merge [name-for-D1-repo]/[D1-working-branch] --allow-unrelated-histories

1
大多数情况下是微不足道的错别字:应该是 git fetch --all--allow-unrelated-histories 标志是相对较新的;如果 git merge 拒绝它,那么你只需要使用一个假定该标志始终存在的旧版本 Git。 - torek

0

我的建议是选择一个仓库作为主要仓库(比如说first-repo),在那里创建一个分支(比如说the-other-repo),然后将the-other-repo的最新版本(不使用git命令,只需简单复制)转储/复制到first-repo的工作目录中,使得the-other-repo成为HEAD,提交更改,然后将the-other-repo分支合并到first-repo的“master”分支的HEAD中。

如果想保留提交历史记录,可以进行变基。


1
是的,这样可以让它工作,但问题在于两者都想要历史记录,并且如果可能的话不想要新的存储库。他们只想尽可能地继续使用自己的git。 - coder007
1
实际上,您可以合并没有共同基础的两个提交。Git以前会在没有警告的情况下执行此操作;现在需要使用--allow-unrelated-histories选项(请参见David Guan的回答)。在任何情况下,Git用作“共同基础”的实际上是空树,因此,与此合成合并基础相比,两个分支末端都完全由“添加所有文件”组成。这有时是您想要的,有时不是。 - torek
你说得对,我编辑了我的回答以删除那个陈述 ;) 谢谢。 - user1785721

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,