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

如何合并两个Git仓库到单仓子目录并保留完整提交历史

合仓需求可行性结论

保留两个原有仓库的全部Git提交历史完全可实现,采用Git原生的subtree能力完成迁移,不会丢失任何提交记录、作者信息、提交时间、分支标签数据,最终效果就是在新仓库的子目录下,依然可以追溯对应项目从初始化到合仓前的所有变更记录。
你提到的全栈团队用单仓(Monorepo)管理前后端代码是非常成熟的实践,确实可以简化跨端PR的关联流程,避免前后端依赖代码合入不同步的问题。

标准操作流程

操作前建议先给两个旧仓库打全量备份,避免误操作影响原有代码资产。

  1. 本地初始化新的webapp空仓库
mkdir webapp && cd webapp
git init
  1. 关联两个旧仓库作为远程源,拉取全量仓库数据
# 关联PHP/Laravel后端仓库repo1
git remote add repo1 <repo1的本地存储路径/远程仓库地址>
git fetch repo1
# 关联Vue/TypeScript前端仓库repo2
git remote add repo2 <repo2的本地存储路径/远程仓库地址>
git fetch repo2
  1. 按目录拆分迁移两个旧仓库的代码,自动保留全量历史
    这一步用git subtree是目前最稳妥的无侵入方案,会自动把旧仓库根目录的所有文件映射到新仓库的对应子目录下,同时完整保留提交链路:
# 将repo1默认分支(通常为main/master)的全部内容迁移到backend子目录
git subtree add --prefix=backend repo1 <repo1的默认分支名>
# 将repo2默认分支的全部内容迁移到frontend子目录
git subtree add --prefix=frontend repo2 <repo2的默认分支名>
  1. 迁移校验与收尾
  • 进入backend、frontend目录分别检查文件完整性,随机调取早期提交执行git log验证,确认提交信息完整、路径映射正确
  • 在新仓库根目录补充全局README、统一的CI/CD配置、根级.gitignore规则,适配单仓开发流程
  • 关联webapp对应的新远程仓库地址,将全量分支、标签推送至远程即可完成迁移
git remote add origin <webapp新仓库的远程地址>
git push origin --all
git push origin --tags
后续维护提示
  • 合仓完成后建议将两个旧仓库设置为归档只读状态,避免团队成员误向旧仓库提交代码导致版本不同步
  • 如果旧仓库存在需要保留的非默认分支、版本标签,在fetch拉取全量引用后,用相同的subtree逻辑对应处理即可,不会出现历史丢失
  • 合仓后的首次仓库提交建议附上明确的迁移说明,同步告知所有团队成员后续代码统一提交到新仓库,旧仓库停止维护

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:06:26