我有一个大约 2030 次提交的仓库。在提交 2000 左右,一个文件被修改,导致它的大小意外地从大约 20M 变为 1.2 GB。是否可以重写历史记录以删除此文件,但只能从提交 2000 中删除?(我不想丢失此文件的先前历史记录)
我在想 git-filter-branch,但看不到一种方法来告诉它“来自提交” - 有可能吗?
干杯迈克
我有一个大约 2030 次提交的仓库。在提交 2000 左右,一个文件被修改,导致它的大小意外地从大约 20M 变为 1.2 GB。是否可以重写历史记录以删除此文件,但只能从提交 2000 中删除?(我不想丢失此文件的先前历史记录)
我在想 git-filter-branch,但看不到一种方法来告诉它“来自提交” - 有可能吗?
干杯迈克
git-filter-branch 的手册页包含这方面的决定性和权威性示例。
如果您想在某个提交之前停止重写,请说 before tag01
:
git-filter-branch ...... -- master ^tag01
用你已经拥有的点代替。tag01 可能是任何 commit-ish (revspec)
PS:如果你使用标签别忘--tag-name-filter cat
了重写这些
你为什么不
new
,您不会将此文件修改为 1.2 GB 文件master
为new
,带有合并选项-Xtheirs
您可能想尝试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 的作者。