Git永久性删除文件及其历史

Reading time ~1 minute

如果一旦上传了一些敏感的文件,比如密码、证书等,或者不想上传的文件,如忘记添加进gitignore、IDE生成的.idea文件夹,或者不小心上传了vendor文件夹,导致repo变的很大的时候,就需要把这些文件全都删掉。但是仅仅删掉文件是没用的,因为git总是忠实地记录我们对目录内的每一个操作。而此时我们就需要一个能够抹掉所有记录的方法,让这些文件看起来就好像从来没有被上传过一样。 github提供了一些方法,可以参考:Remove Sensitive Data 具体来说,需要三步。 1.

  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’,例如,如果要删除repo/foo/bar.abc,那么就输入

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch foo/bar.abc' --prune-empty --tag-name-filter cat -- --all

这一步的目的是,使用filter-branch功能,找出该文件所有的副本,然后全部删除。 2.

git push --force

强制push到远程仓库

git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now

将本地git用来垃圾回收的目录进行清空 这样就可以把想删除的文件彻底删掉了。

PhpStorm2016下Laravel5.2代码智能提示方法

第一步:使用laravel-ide-helper插件。在项目的composer.json中添加如下一行{% highlight json %}"require": { "laravel/framework": "5.0.*", "barryvdh/laravel-ide...… Continue reading

Hello,world

Published on January 01, 2014