删除gitignore修改前提交的大文件
删除gitignore修改前提交的大文件
How
当发现忘记将一个300M的文件加入了git而无法提交到github的时候,你只能通过gitignore补救,但由于已经被版本控制记录过,所以就算你在gitignore里加入了规则也无法push。
所以需要将版本控制中涉及的这个文件删掉,这个错误我已经犯过好多次了,毕竟并不是很容易注意到,在这里记录解决方案。
首先,在git仓库路径下
1 | git rm -r --cache . |
但是这些还不够。
如果是要删掉指定文件
1 | git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch 【文件路径】' --prune-empty --tag-name-filter cat -- --all |
要删掉记录的文件的路径:src/main/resources/config/application-test.yml
则代码为:
1 | git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch src/main/resources/config/application-test.yml' --prune-empty --tag-name-filter cat -- --all |
如果是要删掉指定文件夹
1 | git filter-branch --force --index-filter 'git rm -r --cached --ignore-unmatch 【文件夹路径】' --prune-empty --tag-name-filter cat -- --all |
例如,要删掉记录的文件的路径:src/main/resources/config/
则代码为:
1 | git filter-branch --force --index-filter 'git rm -r --cached --ignore-unmatch src/main/resources/config/' --prune-empty --tag-name-filter cat -- --all |
(删除文件夹代码中多一个**-r**,至于原因,学过Linux的都会懂)
最后推送到远端,本地记录覆盖到Github,(所有branch以及所有tags)
1 | git push origin --force --all |
又
可以考虑git-filter-repo:pip install git-filter-repo
参考
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ZWN's blog!
评论