前言
.gitignore 在新建项目的时候就应该新建,如果你没建,首先请自我评判下,然后开始操作
当前版本缓存
最简单的就是,你发现的及时,本地和线上都是刚好是加入不能计入gtiignore的文件,只需要rm掉重新提交就行。
git rm -r –cached filePath
git commit -m “remove xx”
一般这种情况基本不会发生,一般你发现的时候已经是好几个commit后了
已经好几个版本
git 的rm只会删除掉最近一次的版本,而不会删除掉历史版本的文件,所以当你提交的时候这个文件仍然会在。所以核心思想就是删除掉历史版本的该文件
- rm掉全部历史记录的本文件,可以使用通配符来简化删除过程
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch path-to-your-remove-file' --prune-empty --tag-name-filter cat -- --all
使用你的文件来替换掉path-to-your-remove-file
,注意放的是路径不是文件名称,如果是文件夹的话使用下面的命令
git filter-branch --force --index-filter 'git rm -r --cached --ignore-unmatch path-to-your-remove-file' --prune-empty --tag-name-filter cat -- --all
注:在windows的控制台会报一个bad revision 'rm'
,解决办法是把上边命令的单引号换成双引号 - 使用gc清理版本库
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
- 强制推送
git push origin master --force
- 可能要用的其他命令
- 查看版本库里前三最大文件
git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -3
- 通过上一命令查到的hash来找文件
git rev-list --objects --all | grep 哈希值
- 查看版本库里前三最大文件