如何将两个独立Git仓库合并为含Backend/Frontend结构的单一仓库?
合并两个独立Git仓库并保留提交记录的方法
要实现将两个独立仓库合并为一个大仓库,同时保留双方所有提交记录,且最终仅展示对应文件夹结构,你需要通过重写子仓库提交历史再合并的方式操作,具体步骤如下:
1. 准备临时仓库并重写提交历史
处理后端仓库
- 克隆后端仓库到本地临时目录(若已有本地仓库可跳过克隆):
git clone <你的后端仓库地址> backend-temp cd backend-temp - 使用
git filter-repo重写所有提交,将所有文件迁移到backend目录下(该工具是Git官方推荐的历史重写工具,替代已废弃的filter-branch):git filter-repo --to-subdirectory-filter backend
处理前端仓库
- 返回上级目录,重复类似操作处理前端仓库:
cd .. git clone <你的前端仓库地址> frontend-temp cd frontend-temp git filter-repo --to-subdirectory-filter frontend
2. 创建并初始化大仓库
- 创建大仓库目录并初始化Git:
cd .. mkdir BigProjectOnGithub cd BigProjectOnGithub git init
3. 合并处理后的两个仓库
合并后端仓库
- 将处理后的后端临时仓库作为远程仓库添加,拉取并合并其提交:
git remote add backend ../backend-temp git fetch backend # 替换main为你的后端仓库默认分支(如master) git merge backend/main --allow-unrelated-histories
合并前端仓库
- 同样合并前端仓库的提交:
git remote add frontend ../frontend-temp git fetch frontend # 替换main为你的前端仓库默认分支(如master) git merge frontend/main --allow-unrelated-histories
4. 清理并推送到GitHub
- 删除临时远程仓库引用:
git remote remove backend git remote remove frontend - 添加GitHub远程仓库并推送:
git remote add origin <你的GitHub大仓库地址> git push -u origin main
为什么直接复制文件无效?
你之前直接复制文件的方式,只会将两个项目的当前文件状态作为一个新提交添加到大仓库,完全丢失了原有仓库的200+条提交记录。而通过git filter-repo重写历史,会将每个提交中的文件路径统一修改为对应子目录,合并后所有历史记录都会被保留,Git日志能完整展示两个仓库的提交轨迹,最终推送到GitHub后也只会显示backend和frontend两个文件夹,无额外仓库引用。
内容的提问来源于stack exchange,提问作者Max Schessler
相关产品推荐
相关产品推荐

