抱歉,filter-branch
这是唯一的方法。
如果您感到紧张,您应该尝试在存储库的单独克隆中对其进行测试。请记住,当您执行此操作时,git 会为您备份所有内容,因此您的克隆存储库将在本地增加大小,直到您推送更改的历史记录。
我会在此查看GitHub 的有用页面。
另外,如果你原谅我的无耻插件,我最近一直在研究一个Ruby gem,它提供了一些关于你的历史和工作副本中的大文件的基本指标。它仍在积极开发中,但它可以工作,希望你会发现它有用。
编辑:为什么你的方法不起作用
首先,git 是一个分布式版本控制系统,这意味着当您执行clone
. 因此,您可以git checkout <commit-sha>
对存储库历史记录中的任何提交执行 a,以准确获取存储库在过去某个时间点的样子。
创建一个新分支并不能将您从存储库的历史中解放出来;事实上,分支只是提交的指针。所以为了简化,所有分支都有一个共同的祖先,这就是为什么你的new-master
分支和你的旧分支完全一样master
。大小的小幅减少可能是由于 git 从垃圾收集中获得了更好的优化。
当你跑的时候git gc --prune=now
,你只是在移除loose objects
ie 不在你的packfile
. Apackfile
是 git 有效存储对象以提高效率并减小存储库大小的地方。您可以在此处找到更多信息。
如果你是一个 git 新手,你需要接受很多东西,但我试图给出一个高层次的概述。我将探索优秀的 git 文档并准备好使用该git filter-branch
命令以真正减少存储库的大小。