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

合并Git仓库到另一仓库子目录并保留历史,文件未进入指定目录

问题排查与正确操作流程

可能踩的坑

  • 执行git filter-repo --to-subdirectory-filter A时,没进到repo_A的本地克隆目录里,等于白跑命令,根本没改到目标仓库
  • git filter-repo没装对,PowerShell里根本没执行这个命令(没输出大概率是命令不存在,系统直接跳过了)
  • 合并步骤漏了关键操作,没把处理好的repo_A作为远程仓库加到new_repo里就直接合并

正确操作步骤

1. 先确认工具正常

在PowerShell里输git filter-repo --version,能打出版本号就说明装好了。没装的话用pip install git-filter-repo装一下(前提是你有Python环境)。

2. 处理repo_A

  • 先克隆repo_A到本地:
    git clone <repo_A的远程地址> repo_A_local
    
  • 必须进到这个本地克隆目录里:
    cd repo_A_local
    
  • 再执行目录过滤命令(这次应该会跳出一堆处理日志):
    git filter-repo --to-subdirectory-filter A
    
    跑完之后,这个本地仓库里的所有文件都会被移到A子目录下,所有提交历史也会被重写成对应路径的记录。

3. 处理repo_B

跟上面步骤一模一样,把A换成B就行:

git clone <repo_B的远程地址> repo_B_local
cd repo_B_local
git filter-repo --to-subdirectory-filter B

4. 合并到new_repo

  • 新建并初始化新仓库:
    mkdir new_repo
    cd new_repo
    git init
    
  • 把处理好的repo_A本地仓库加为远程,然后拉取:
    git remote add repo_A ../repo_A_local
    git pull repo_A main  # 这里的main换成你repo_A实际的主分支名,比如master
    
  • 同样处理repo_B,注意要加--allow-unrelated-histories,因为两个仓库原本没关联历史:
    git remote add repo_B ../repo_B_local
    git pull repo_B main --allow-unrelated-histories
    

检查结果

这时new_repo目录里应该有A、B两个子目录,分别对应原仓库的内容。输git log --oneline能看到两个仓库的所有提交记录,历史完整保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 00:20:14