4

我有一个大约 2030 次提交的仓库。在提交 2000 左右,一个文件被修改,导致它的大小意外地从大约 20M 变为 1.2 GB。是否可以重写历史记录以删除此文件,但只能从提交 2000 中删除?(我不想丢失此文件的先前历史记录)

我在想 git-filter-branch,但看不到一种方法来告诉它“来自提交” - 有可能吗?

干杯迈克

4

3 回答 3

2

git-filter-branch 的手册页包含这方面的决定性和权威性示例。

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

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

用你已经拥有的点代替。tag01 可能是任何 commit-ish (revspec)

PS:如果你使用标签别忘--tag-name-filter cat了重写这些

于 2011-06-24T10:06:30.477 回答
1

你为什么不

  1. 在提交 2000 处创建一个分支new,您不会将此文件修改为 1.2 GB 文件
  2. 变基masternew,带有合并选项-Xtheirs
  3. 垃圾收集存储库以节省磁盘空间。
于 2011-06-24T10:15:26.407 回答
1

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

下载可执行 jar(需要 Java 6 或更高版本)并运行以下命令:

$ java -jar bfg.jar --strip-blob-big-than 100MB my-repo.git

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

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

于 2013-02-01T22:18:48.613 回答