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

如何创建仅包含单个文件完整历史记录的Git分支?

创建仅包含单个文件完整历史的Git分支

这完全可行,以下是两种适配你Git版本(2.39.2.windows.1)的实现方法:

方法一:使用git filter-branch

git filter-branch是你当前Git版本自带的历史重写工具,针对单个文件的处理步骤如下:

  1. 基于当前分支创建并切换到新分支(示例分支名test-js-only):
git checkout -b test-js-only
  1. 用--index-filter高效重写历史(比--tree-filter更快,无需操作工作目录):
git filter-branch --prune-empty --index-filter '
    git rm --cached -r --ignore-unmatch .
    git add ./src/js/mains/test.js
' HEAD
  • --prune-empty:自动移除因文件删除而变成空的提交
  • 索引过滤逻辑:先清空索引中所有文件,再重新添加目标文件./src/js/mains/test.js,确保每个提交仅保留该文件

如果你偏好操作工作目录的方式,也可以用--tree-filter:

git filter-branch --prune-empty --tree-filter '
    find . -path ./src/js/mains/test.js -prune -o -type f -exec rm -f {} \;
' HEAD

方法二:使用git filter-repo(官方推荐替代方案)

Git官方已推荐git filter-repo作为git filter-branch的替代工具,功能更简洁高效。若你的环境未预装,可通过Chocolatey或官方二进制包安装。

步骤如下:

  1. 创建并切换到新分支:
git checkout -b test-js-only
  1. 执行过滤命令,可按需将文件移动到根目录:
git filter-repo --path src/js/mains/test.js --path-rename src/js/mains/test.js:test.js
  • --path:指定需要保留的单个文件
  • --path-rename:可选参数,将目标文件从原路径移动到分支根目录,简化结构

验证结果

执行完成后,可通过以下命令确认效果:

# 查看分支提交历史,仅显示与test.js相关的记录
git log --oneline
# 查看当前分支文件列表,确认仅保留目标文件
ls -la

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:43:34