如何将本地Git仓库迁移到新远程仓库并保留指定提交历史
解决Git迁移历史提交报错的可行方案
方案1:创建仅包含指定提交范围的新仓库
步骤1:定位要保留的起始提交
找到问题提交之后的第一个正常提交,复制它的完整哈希值(记为<START_COMMIT>)。
步骤2:初始化新仓库
在本地新建一个空文件夹,打开终端进入后运行:
git init
步骤3:导入原仓库的指定提交历史
- 把原本地仓库设为临时远程源:
git remote add old-repo /你原仓库的绝对路径/ - 拉取从
<START_COMMIT>到原仓库main分支最新的所有提交,两种方式选一个:
方式一(知道起始提交哈希):
方式二(知道起始提交的日期):git fetch old-repo refs/heads/main:temp-branch git cherry-pick <START_COMMIT>..temp-branch
要是cherry-pick过程中出现冲突,解决冲突后继续运行git pull old-repo main --shallow-since="202X-XX-XX"git cherry-pick --continue就行。
步骤4:关联新GitLab仓库并推送
- 设置新的GitLab远程地址:
git remote set-url origin <你的新GitLab仓库地址> - 推送本地main分支到远程:
git push -u origin main
方案2:直接在原仓库截断历史(谨慎操作)
如果原仓库本地文件没问题,只是历史提交有损坏,可尝试截断问题提交之前的历史:
# 基于要保留的起始提交创建新分支 git checkout -b clean-main <START_COMMIT> # 把原main分支重置到clean-main git checkout main git reset --hard clean-main # 强制推送到新GitLab仓库 git push -uf origin main
注意:这个操作会改写原仓库的本地历史,执行前务必确保没有未提交的更改,最好先备份原仓库。
内容的提问来源于stack exchange,提问作者yow
相关产品推荐
相关产品推荐

