编辑:我的先前答案没有带来任何好的结果。git rebase并不意味着要这样做。
然而,在stackoverflow上已经发生了类似的事情:合并两个git存储库以获取线性历史记录
您可以尝试使用以下步骤:
git init combined
cd combined
git remote add old url:/to/old
git remote add new url:/to/new
git remote update
您将拥有一个新的代码库,并参考两个代码库。然后:
git reset --hard old/master
这将使主分支指向旧仓库的主分支。现在,您可以从新仓库的主分支挑选所有提交。
git cherry-pick <sha-1 of first commit on new repo>..new/master
我们回到了起点:主分支没问题,但新仓库中的其他分支怎么办呢?
好的,您不再需要旧仓库了,所以...
git remote rm old
那么,假设你在新仓库中有一个名为“branch1”的分支。
git checkout branch1
git rebase master
这将更改branch1的历史记录,使其从包含导入库历史记录的主分支(合并后的主分支)开始,并且重新基础应该在没有冲突的情况下进行。
使用gitk检查历史记录是否一致,然后您可以使用force push命令强制推送。
git push -f new master
git push -f new branch1
在强制推送之前,您必须确保历史记录正确,因为这将更改上游的历史记录(请备份新旧仓库以便需要时恢复)。