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

如何将repo1指定文件夹连同提交历史迁移至repo2?

精准迁移指定文件夹及提交历史到目标仓库的方案

以下是仅迁移repo1/src/build文件夹及其完整提交历史到repo2/src1/build的分步操作,可避免全量迁移带来的大量冲突:

步骤1:提取目标文件夹并重构路径

使用官方推荐的git filter-repo工具替代已弃用的filter-branch,从repo1中剥离目标文件夹的历史,并调整为repo2需要的路径结构:

  • 克隆repo1到临时本地仓库:
    git clone <repo1的远程URL> temp-repo1
    cd temp-repo1
    
  • 过滤并重构文件路径:
    git filter-repo --path src/build --path-rename src/build:src1/build
    
    该命令会保留src/build下的所有文件及对应提交历史,并将它们的路径重命名为src1/build,与repo2的目标路径完全匹配。

步骤2:推送处理后的历史到repo2临时分支

将处理好的临时仓库关联到repo2,并推送为独立临时分支:

  • 添加repo2作为远程仓库:
    git remote add repo2 <repo2的远程URL>
    
  • 推送处理后的分支到repo2的临时分支(假设repo1主分支为main,可根据实际分支名替换):
    git push repo2 main:temp-migrate-branch
    

步骤3:在repo2中合并迁移历史

回到repo2本地仓库,完成临时分支的合并:

  • 克隆repo2到本地(若已克隆则直接进入对应目录):
    git clone <repo2的远程URL> local-repo2
    cd local-repo2
    
  • 拉取远程临时分支:
    git fetch origin temp-migrate-branch
    
  • 合并分支(因两个分支历史无关联,需添加--allow-unrelated-histories参数):
    git merge temp-migrate-branch --allow-unrelated-histories
    
  • 若repo2中已有src1/build路径导致少量冲突,手动解决后提交:
    git commit -m "迁移repo1/src/build至src1/build,保留完整提交历史"
    
  • 推送合并结果到repo2主分支:
    git push origin main
    

步骤4:清理临时资源

  • 删除本地临时仓库:
    cd .. && rm -rf temp-repo1
    
  • 删除repo2上的临时分支(可选):
    cd local-repo2
    git push origin --delete temp-migrate-branch
    

注意事项

  • 确保已安装git filter-repo:部分系统默认未预装,可通过包管理器安装(如Ubuntu用sudo apt install git-filter-repo,macOS用brew install git-filter-repo)。
  • 操作前建议备份repo2,避免意外数据丢失。
  • 若repo1提交历史较长,filter-repo处理可能耗时,请耐心等待。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:57:51