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

如何将多个现有Git仓库迁入新父仓库并保留提交历史

多Git仓库合并入同一主仓库(保留提交历史)操作指南

问题原因说明

你之前操作触发异常的核心原因:直接将其他Git仓库的文件夹放入主仓库时,主仓库会识别子目录中的.git文件夹,自动将该目录标记为Git子模块而非普通目录,因此会触发commit or discard the untracked or modified content in submodules报错,推送到GitHub后显示的灰色不可点击条目是子模块的gitlink标识,未关联实际仓库内容。

操作步骤

该需求完全可以实现,按以下步骤操作即可完整保留所有提交历史:

  • 第一步:准备干净的主仓库工作区,执行git status确认无未提交的变更
  • 第二步:添加待合并的子仓库为远程源,此处可填子仓库的本地路径或远程地址:
    git remote add -f 子仓库别名 子仓库地址
    
    例:待合并的子仓库名称为project1,命令写为git remote add -f project1 /local/path/to/project1
  • 第三步:合并子仓库内容到主仓库当前分支,允许不相关历史合并:
    git merge --allow-unrelated-histories 子仓库别名/子仓库默认分支名
    
    注:子仓库默认分支名一般为main或master,按实际情况替换即可
  • 第四步(可选):如果需要将子仓库内容存放到主仓库的指定子目录,避免多仓库文件冲突,执行以下操作:
    mkdir 子目录名
    git mv 子仓库所有文件 子目录名/
    git commit -m "移动[子仓库别名]内容到指定子目录"
    
  • 第五步:重复第二步到第四步,依次完成所有子仓库的合并操作
  • 第六步:全部合并完成后,执行git push推送到主仓库的远程端即可

验证说明

合并完成后执行git log可查看所有子仓库的提交历史都会完整保留、按提交时间顺序排列,GitHub端的子目录可正常点击访问,无异常显示。

可选优化

如果后续不需要再和原有的子仓库同步更新,可执行git remote remove 子仓库别名删除对应远程源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:45:04