我正在使用git开始一个项目,我将提交非常大的文件,但每周只有几次。我已经尝试使用git as-is,它似乎将整个文件存储在每次更改的提交中。这不适用于此项目,存储库将失去控制。所以,我想减少存储库的大小。
我的第一个想法是“简单地”删除所有超过两周的提交,或仅保留例如历史上的五个提交(这可能更好:) :)我已经用Google搜索并从The Git社区书中阅读了很多内容,我想我需要使用git-rebase
或git-filter-branch
。事情是我似乎无法让它工作。
只是为了说明;我的历史H只有一个分支(主分支)
A - > B - > C - > D - > ë
我想删除一些先前的提交,以使我的历史记录看起来像
C - > D - > ë
提交A和B应该被彻底清除。我试过git-rebase
但它似乎将提交合并在一起而不是实际删除旧的,也许我不完全理解rebase是如何工作的。另一个想法是从.git / objects中删除所有内容然后使用git-hash-object -w
,git-mktree
和git-commit-tree
构建新的提交,我还没有设法将这个“人工”树推送到服务器。
我不会与任何分支机构合作,所以不需要考虑这些因素。
我想知道的是,是否有人可以给我git-rebase
的具体用法,如果这是我应该使用的?或者其他一些提示,我可以做的例子。
干杯!
修改
大文件不会一直是大文件,有些文件会被新文件替换。我希望这些被替换的文件从历史记录完全清除。
答案 0 :(得分:13)
这应该是一个简单的git rebase -i
,你有
p A
s B
s C
p D
p E
然后将A-C的提交消息编辑为C的提交消息。
git-rebase会将所有提交“压缩”到一个提交中,其对象与提交C的对象相同。
注意:如果您愿意,可以使用git filter-branch
更改先前提交中的大文件以实际匹配新文件。但这是一次危险的行动,我不想在事故上给你一个坏的指挥。