有许多关于“如何从存储库中删除意外添加的大文件”的SO问题,其中许多建议使用git gc
命令。 但是,我发现它对我不起作用,我不知道出了什么问题。
以下是我所做的:
$ git init
Initialized empty Git repository in /home/wzyboy/git/myrepo/.git/
$ echo hello >> README
$ git add README
$ git commit -a -m 'init commit'
[master (root-commit) f21783f] init commit
1 file changed, 1 insertion(+)
create mode 100644 README
$ du -sh .git
152K .git
$ cp ~/big.zip .
$ git add big.zip
$ git commit -a -m 'adding big file'
[master 3abd0a4] adding big file
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 big.zip
$ du -sh .git
77M .git
$ git log --oneline
3abd0a4 adding big file
f21783f init commit
$ git reset --hard f21783f
HEAD is now at f21783f init commit
$ git log --oneline
f21783f init commit
$ git gc --aggressive --prune=all
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), done.
Total 6 (delta 0), reused 0 (delta 0)
$ git gc --aggressive --prune=now
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), done.
Total 6 (delta 0), reused 6 (delta 0)
$ du -sh .git
77M .git
$ git version
git version 2.2.2
在上面的控制台输出中,我创建了一个新的git仓库,添加了一个小文本文件,.git
目录的大小为152K,一切都很好。然后我将一个大文件添加到仓库中,目录膨胀到77M。但是,在我的尝试中移除大文件(git reset --hard
或git rebase -i
)后,无论我如何使用不同选项运行git gc
,都不能恢复大文件所占用的磁盘空间。有人可以告诉我为什么
git gc
在我的情况下不起作用吗?我应该怎么做才能恢复磁盘空间?是否可能使用git gc
而不是git filter-branch
来恢复磁盘空间?谢谢。
git reflog expire --expire=now --all
可以翻译为:清除所有 Git 引用日志记录,包括过期的记录。 - Andrew C