如何将多个现有Git仓库迁入新父仓库并保留提交历史
多Git仓库合并入同一主仓库(保留提交历史)操作指南
问题原因说明
你之前操作触发异常的核心原因:直接将其他Git仓库的文件夹放入主仓库时,主仓库会识别子目录中的.git文件夹,自动将该目录标记为Git子模块而非普通目录,因此会触发commit or discard the untracked or modified content in submodules报错,推送到GitHub后显示的灰色不可点击条目是子模块的gitlink标识,未关联实际仓库内容。
操作步骤
该需求完全可以实现,按以下步骤操作即可完整保留所有提交历史:
- 第一步:准备干净的主仓库工作区,执行
git status确认无未提交的变更 - 第二步:添加待合并的子仓库为远程源,此处可填子仓库的本地路径或远程地址:
例:待合并的子仓库名称为project1,命令写为git remote add -f 子仓库别名 子仓库地址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
相关产品推荐
相关产品推荐

