You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为GitLab导入仓库添加原仓库提交历史?替代grafts方案

替代Git Grafts的历史合并方案(兼容未来版本)

操作前提

你需要同时拥有两个仓库的本地副本:

  • 原仓库:包含完整提交历史的旧仓库
  • 新仓库:当年仅复制文件、无历史的GitLab仓库

步骤1:关联原仓库到新仓库

进入新仓库目录,将原仓库作为远程源添加并拉取历史:

cd /path/to/your/gitlab-new-repo
git remote add old-history /path/to/your/original-repo
git fetch old-history

步骤2:定位关键提交SHA

  • 找到原仓库中你当初复制文件时的最后一个提交,记为OLD_COMMIT_SHA(可通过git log --oneline在原仓库中查看)
  • 找到新仓库的第一个提交,记为NEW_FIRST_COMMIT_SHA(新仓库执行git log --oneline --reverse即可看到)

步骤3:用git replace关联历史(Grafts的官方替代)

git replace是Git官方推荐的Grafts替代方案,稳定性和兼容性更强:

git replace --graft $NEW_FIRST_COMMIT_SHA $OLD_COMMIT_SHA

执行后,用git log查看新仓库历史,会发现原仓库的提交已经衔接在新仓库第一个提交之前。

步骤4:同步到远程仓库(可选)

如果需要让团队其他成员也能看到完整历史,推送replace引用到GitLab:

git push origin refs/replace/*

其他成员拉取时,需要配置Git默认拉取replace引用:

git config remote.origin.fetch "+refs/replace/*:refs/replace/*"
git pull

步骤5:固化合并历史(可选)

如果想彻底移除对git replace的依赖,重写新仓库的提交历史,让原历史完全整合到主分支:

git rebase --root --preserve-merges

重写完成后,可删除replace引用:

git replace -d $NEW_FIRST_COMMIT_SHA

最后强制推送重写后的分支到GitLab(注意:此操作会修改远程历史,需提前告知团队成员):

git push --force-with-lease origin main

注意事项

  • 操作前务必备份两个仓库的本地副本,避免数据丢失
  • 重写远程历史后,所有团队成员需要重新拉取并同步本地分支
  • 如果原仓库和新仓库的文件结构存在差异,关联后可能需要手动解决冲突再执行重写

内容的提问来源于stack exchange,提问作者Jan Zimmermann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 19:18:21