编辑:我之前的回答并没有带来任何好处。git rebase 并不是要这样做。然而,类似的事情已经在 stackoverflow 上发生了:Merging two git repositories to get linear history
您可以尝试以下过程:
git init combined
cd combined
git remote add old url:/to/old
git remote add new url:/to/new
git remote update
您将拥有一个新的 repo,其中包含两个 repos 的引用。然后
git reset --hard old/master
这将使 master 分支指向旧 repo 的 master 分支。您现在可以从新仓库的主分支中挑选所有提交
git cherry-pick <sha-1 of first commit on new repo>..new/master
我们是刚开始的:master 分支还可以,但是新仓库中的其他分支呢?好吧,你不再需要你的旧仓库了,所以
git remote rm old
然后,假设您在新存储库中有一个名为“branch1”的分支。
git checkout branch1
git rebase master
这应该会更改 branch1 的历史记录,使其从 master(合并的 master,包含您导入的 repo 的历史记录)开始,并且 rebase 应该不会发生冲突。检查历史是否与gitk一致,然后可以强制推送
git push -f new master
git push -f new branch1
在强制推送之前,您必须确保历史记录正常,因为这将更改上游历史记录(保留新旧存储库的备份以在需要时恢复)