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

使用git filter-repo保留指定目录并迁移子目录至根目录

使用git filter-repo高效清理仓库并迁移目录

解决--path-rename的错误问题

你遇到的Empty path component found in input错误,是因为--path-rename的语法要求冒号后必须指定有效的目标路径,不能留空。要把src/module1下的内容移到仓库根目录,用.表示根目录即可。

正确的filter-repo命令

执行以下命令可以高效完成你的需求:

git filter-repo --path cmake --path src/module1 --path-rename src/module1:.

这条命令的作用:

  • --path cmake和--path src/module1:仅保留这两个目录的历史
  • --path-rename src/module1:.:将src/module1下的所有文件和子目录直接迁移到仓库根目录
  • 自动删除所有未被指定保留的目录(如ci/、doc/、src/module2等)

每日同步主仓库提交的方法

由于历史被重写,本地仓库与原主仓库的提交历史已不一致,直接拉取会冲突,按以下步骤同步:

  1. 添加原主仓库为远程源(如果还没加):
    git remote add upstream <原主仓库的Git地址>
    
  2. 拉取主仓库的最新提交:
    git fetch upstream
    
  3. 创建临时分支并处理主仓库的最新历史:
    git checkout -b sync_temp upstream/main
    git filter-repo --path cmake --path src/module1 --path-rename src/module1:.
    
  4. 将本地主分支同步到处理后的历史:
    git checkout main
    git reset --hard sync_temp
    git branch -D sync_temp
    

注意事项

  • 执行git filter-repo前一定要备份原仓库,因为它会永久重写仓库历史,无法撤销
  • git filter-repo比git filter-branch效率高几个数量级,3450次提交通常几分钟就能完成

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 11:07:14