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

如何合并两个GitHub仓库并保留Git历史,支持后续协同提交?

合并两个Git仓库并保留历史与子目录结构

操作步骤

1. 创建并初始化新主仓库

mkdir new-main-repo
cd new-main-repo
git init

2. 导入第一个仓库并调整目录结构

# 添加原Repo1为远程仓库
git remote add repo1 <Repo1的Git仓库地址>
git fetch repo1

# 切换到Repo1的主分支(如果原分支是master请替换)
git checkout repo1/main
# 重写Repo1所有历史,将所有文件迁移到repo1子目录下
git filter-repo --to-subdirectory-filter repo1

# 切回新仓库主分支,合并Repo1的历史
git checkout main
git merge --allow-unrelated-histories repo1/main

3. 导入第二个仓库并调整目录结构

# 添加原Repo2为远程仓库
git remote add repo2 <Repo2的Git仓库地址>
git fetch repo2

# 切换到Repo2的主分支(如果原分支是master请替换)
git checkout repo2/main
# 重写Repo2所有历史,将所有文件迁移到repo2子目录下
git filter-repo --to-subdirectory-filter repo2

# 切回新仓库主分支,合并Repo2的历史
git checkout main
git merge --allow-unrelated-histories repo2/main

验证与使用

  • 查看完整历史:执行git log --oneline,可以看到两个原仓库的提交记录都被保留
  • 使用git blame:进入对应子目录(比如cd repo1),执行git blame <文件名>,即可查看原仓库的提交信息
  • 后续提交:在新仓库的任意分支中,修改repo1或repo2目录下的文件后,直接执行git add --all和git commit,即可将两个目录的变更一起提交

注意事项

  • 确保已安装git-filter-repo工具,若未安装可通过系统包管理器安装(如Ubuntu:apt install git-filter-repo,Mac:brew install git-filter-repo)
  • 若原仓库的主分支不是main,请替换为实际分支名(如master)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:20:55