从历史中完全删除(旧)git提交

时间:2011-02-13 22:29:08

标签: git size history rebase

我正在使用git开始一个项目,我将提交非常大的文件,但每周只有几次。我已经尝试使用git as-is,它似乎将整个文件存储在每次更改的提交中。这不适用于此项目,存储库将失去控制。所以,我想减少存储库的大小。

我的第一个想法是“简单地”删除所有超过两周的提交,或仅保留例如历史上的五个提交(这可能更好:) :)我已经用Google搜索并从The Git社区书中阅读了很多内容,我想我需要使用git-rebasegit-filter-branch。事情是我似乎无法让它工作。

只是为了说明;我的历史H只有一个分支(主分支)

  

A - > B - > C - > D - > ë

我想删除一些先前的提交,以使我的历史记录看起来像

  

C - > D - > ë

提交A和B应该被彻底清除。我试过git-rebase但它似乎将提交合并在一起而不是实际删除旧的,也许我不完全理解rebase是如何工作的。另一个想法是从.git / objects中删除所有内容然后使用git-hash-object -wgit-mktreegit-commit-tree构建新的提交,我还没有设法将这个“人工”树推送到服务器。

我不会与任何分支机构合作,所以不需要考虑这些因素。

我想知道的是,是否有人可以给我git-rebase的具体用法,如果这是我应该使用的?或者其他一些提示,我可以做的例子。

干杯!


修改

大文件不会一直是大文件,有些文件会被新文件替换。我希望这些被替换的文件从历史记录完全清除

1 个答案:

答案 0 :(得分:13)

这应该是一个简单的git rebase -i,你有

p A
s B
s C
p D
p E

然后将A-C的提交消息编辑为C的提交消息。

git-rebase会将所有提交“压缩”到一个提交中,其对象与提交C的对象相同。

注意:如果您愿意,可以使用git filter-branch更改先前提交中的大文件以实际匹配新文件。但这是一次危险的行动,我不想在事故上给你一个坏的指挥。

相关问题