问题
最新有个项目在git
提交时忘了在.gitignore
添加忽略了 导致不小心提交了一个大文件进去
当得知这一操作后 立马使用git reset Head^
对提交进行回退 并且使用git rm --cache
来删除这个大文件缓存 可问题是.git
包体积依然很大 说明这个文件还未彻底清除
如果想清除该大文件 可以按照以下操作
解决步骤
使用
git filter-branch
命令:1
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch path/to/your/large/file' --prune-empty --tag-name-filter cat -- --all
请将
path/to/your/large/file
替换为实际文件的路径 这个命令会重新写入所有的历史记录,将指定的大文件从中移除清除
reflog
记录:1
git reflog expire --expire=now --all
上面的指令会清除所有的reflog记录, 如果我们只想清除误添加大文件的那个记录可以使用以下指令:
1
git reflog delete HEAD@{n}
垃圾回收:
1
git gc --prune=now
这个命令将清除不再需要的对象,并压缩
.git
文件使用
bfg
工具(如果需要)
如果上述方法无效,你可以尝试使用bfg
工具。首先,安装bfg
:1
brew install bfg # 如果你使用的是Mac,并且安装了Homebrew
然后,在你的项目目录下运行以下命令来移除大文件:
1
bfg --delete-files path/to/your/large/file
最后,执行垃圾回收命令来清除无用的数据:
1
git reflog expire --expire=now --all && git gc --prune=now --aggressive
bfg
工具比filter-branch
更快,并且更容易使用。
在执行这些操作之前,请确保你已经备份了重要的数据,以防万一
另辟蹊径
当我们将commit
进行回退然后提交到远程仓库后, 其实远程仓库的git
包是不带大文件的 也仅仅是本地.git
还存在缓存垃圾
根据此原理 我们可以重新clone
一下项目代码到独立的目录中 让后将.git
进行替换即可
本文为作者原创 转载时请注明出处 谢谢