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

如何从Git仓库X复制指定文件到新仓库Y并保留提交历史(不改动X)

解决方案:保留提交历史创建新仓库Y且不改动原仓库X

别担心,完全不用动原仓库X里的任何文件,咱们通过Git的历史过滤工具就能创建符合要求的新仓库Y,同时完整保留目标文件的所有提交历史。以下是具体操作步骤:

步骤1:克隆原仓库X的本地临时副本

首先,咱们先把原仓库X克隆到本地一个临时目录里,所有操作都在这个副本上进行,绝对不会影响远程或本地的原仓库X:

git clone <你的X仓库远程地址> repo-x-temp
cd repo-x-temp

步骤2:过滤历史,只保留需要的文件/目录

现在用官方推荐的git filter-repo工具(替代老旧的git filter-branch,更快更可靠),只保留你需要的路径:

git filter-repo --path folder1/ --path folder4/a.cpp --path c.cpp

这条命令会重写整个仓库的提交历史,只保留和folder1、folder4/a.cpp、c.cpp相关的所有提交,最终本地仓库的结构就会变成你想要的Y的样子:

├── folder1
├── folder4
│   └── a.cpp
└── c.cpp

小贴士:如果你的环境还没安装git filter-repo,可以用包管理器安装(比如Ubuntu用apt install git-filter-repo,Mac用brew install git-filter-repo),或者用pip安装:pip install git-filter-repo。

步骤3:推送到新仓库Y

先在GitHub/Bitbucket上创建一个空的新仓库Y,然后把过滤后的本地仓库推送到这个远程仓库:

# 先移除原仓库的远程关联(可选,避免误推回X)
git remote remove origin
# 添加新仓库Y的远程地址
git remote add origin <你的Y仓库远程地址>
# 推送分支(如果你的主分支是master就替换成master)
git push -u origin main

步骤4:清理临时目录

完成推送后,你就可以删掉本地的repo-x-temp临时目录了,原仓库X的结构和文件完全没被改动,完全不影响其他地方的使用。


内容的提问来源于stack exchange,提问作者J. Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:58:05