You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将指定文件的相关提交记录迁移至新Git仓库?

当然可行!这是Git非常实用的场景,以下是具体操作步骤

准备工作

  • 先克隆原仓库的本地副本(绝对不要直接操作原仓库,避免误删数据):
    git clone <原仓库的URL> old-repo
    cd old-repo
    
  • 安装git-filter-repo:这是Git官方推荐用来替代老旧的filter-branch的工具,稳定性和效率更高。根据你的系统:
    • Ubuntu/Debian:sudo apt install git-filter-repo
    • macOS:brew install git-filter-repo
    • Windows:可以通过Chocolatey安装,或者直接从Git官方渠道获取可信脚本

核心:过滤出指定文件的提交历史

old-repo目录下运行以下命令,它会重写仓库历史,只保留涉及tool.ctool.h的所有提交,其他无关提交和文件会被彻底移除:

git filter-repo --path tool.c --path tool.h

小提示:如果这两个文件曾经有过路径变更(比如从src/tool.c移到根目录),要把所有历史路径都加上,比如--path src/tool.c --path tool.c,确保不会遗漏任何相关提交。

验证结果

  • git log --oneline查看提交历史,确认只保留了和目标文件相关的记录
  • ls查看仓库内容,应该只剩下tool.ctool.h两个文件,确保没有冗余内容

迁移到新仓库

方式1:本地新仓库

  1. 创建并进入新仓库目录:
    mkdir ../new-tool-repo && cd ../new-tool-repo
    git init
    
  2. 回到旧仓库,把过滤后的历史推送到新仓库:
    cd ../old-repo
    git remote add new-local-repo ../new-tool-repo
    git push new-local-repo main  # 如果你的主分支是master,就换成master
    

方式2:远程新仓库

直接把过滤后的仓库推送到远程新仓库(先在Git平台创建好空的新仓库):

git remote add new-remote-repo <新仓库的URL>
git push new-remote-repo main

注意事项

  • 这个操作是不可逆的,所以全程在克隆的副本上操作,绝对不要碰原仓库
  • 如果你的仓库有复杂的合并历史,git-filter-repo通常能自动处理,但如果遇到特殊情况,可以查看工具的官方文档调整参数
  • 迁移完成后,新仓库就可以独立迭代开发,完全不影响原仓库的内容

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

火山引擎 最新活动