You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将旧Git仓库的提交历史合并到新仓库?(含操作尝试及问题排查记录)

如何将旧Git仓库的提交历史合并到新仓库?(含操作尝试及问题排查记录)

我最近碰到了一个Git历史整合的麻烦事儿,折腾了好一阵才搞定,把过程和解决方案分享给大家:

问题背景

之前我在一个GitHub账号下有个仓库,本地也存了完整的代码和提交记录。后来我注销了那个旧账号,新建了一个账号,在新账号上开了个空白仓库,把旧仓库本地文件删掉.git文件夹后,放到新仓库里推上去,之后就一直在新账号上开发、提交代码。

现在我手里还留着旧仓库的本地完整文件,想把旧仓库的所有提交历史(包括分支、PR这些内容)合并到新仓库的历史里,让整个项目的提交记录连贯起来。我猜应该用git rebase操作,但具体步骤摸不准,网上搜的内容也没完全匹配我的场景,怕乱操作把仓库搞坏。

初次尝试与遇到的问题

后来我先把旧仓库的main分支放到GitHub上,试着做了以下操作:

  • 给旧仓库新建一个分支old-repo-new-branch
  • 在这个新分支里推送新仓库的所有内容
  • 执行rebase命令:git rebase --onto IdOfLastCommitInMainBranch IdOfFirstCommitInNewBranch old-repo-new-branch(把命令里的占位符换成旧仓库最后一个提交ID、新仓库第一个提交ID)

这一步完成后,两个仓库的提交历史确实合并到了old-repo-new-branch分支里,但同步远程仓库的时候报错了:

fatal: refusing to merge unrelated histories

我搜了下解决方法,执行了git pull origin old-repo-new-branch --allow-unrelated-histories,之后再推送就成功了。但新的问题出现了:新旧历史衔接处的那个提交没有父提交(本该以旧仓库的最后一个提交作为父提交),在GitHub或者GitHub Desktop里查看这个提交的diff时,所有文件都显示为绿色的加号,没法正常显示和上一个提交的修改对比。

最终解决方案

后来才发现我犯了个关键错误:已经把分支推送到GitHub之后再做rebase操作!按照@etfshift0的建议,我只在本地操作新仓库的分支,执行了以下命令:

git rebase --onto id-of-last-commit-to-keep-from-old-repo id-of-first-commit-in-new-repo branch-of-new-repo

等本地rebase完成、确认历史连贯正常后,再把这个分支推送到新的GitHub仓库,问题就完全解决了!

备注:内容来源于stack exchange,提问作者hammon5tl

火山引擎 最新活动