从git repo中完全删除文件(从某个时间点开始)

时间:2011-06-24 09:58:38

标签: git git-filter-branch git-rewrite-history

我有一个约2030次提交的回购。在提交2000周围,一个文件被修改,导致它的大小意外地从大约20M到1.2GB。是否可以重写历史记录以删除此文件,但仅限于提交2000? (我不想丢失此文件的先前历史记录)

我在考虑使用git-filter-branch,但是无法看到一种方法告诉它“来自提交” - 是否可能?

干杯 麦克

3 个答案:

答案 0 :(得分:2)

git-filter-branch的手册页包含了确凿且权威的示例。

如果您想在某个提交之前停止重写,请在tag01之前停止:

git-filter-branch ......  -- master ^tag01

替换你已有的点。 tag01可以改为commit-ish(revspec)

PS:如果您使用标签,请不要忘记--tag-name-filter cat来重写这些

答案 1 :(得分:1)

你为什么不

  1. 在commit 2000处创建分支new,您不会将此文件修改为1.2 GB文件
  2. 使用合并选项master
  3. new重新定位到-Xtheirs
  4. 垃圾收集存储库以节省磁盘空间。

答案 2 :(得分:1)

您可能需要尝试BFG Repo-Cleaner,这是git-filter-branch的一种更快,更简单的替代方案,旨在从Git存储库中删除大型文件或私有数据。

下载the executable jar(需要Java 6或更高版本)并运行此命令:

  

$ java -jar bfg.jar --strip-blobs-greater-than 100MB my-repo.git

任何超过100MB的内容(不在最新提交的文件层次结构中)都将从存储库的历史记录中完全删除。如问题中所述,文件的所有小于100MB的版本将保持不变。

完全披露:我是BFG Repo-Cleaner的作者。