初次使用 git 的“核弹级选项”:filter-branch 从仓库中删除文件
2014-12-18 19:02
423 查看
当初看 Pro Git 时就被作者这个“核弹级选项”的称呼吓到了,因此一直没敢好奇地去尝试。核弹啊,用对了威力无穷,用错了破坏力无穷!
但是,今天,我不得不用了,因为我想把我的原来写一些代码放到 github 上去公开。由于之前没想过要公开,到上传时才发现不能上传大于50M的文件。
折腾了半天,还是无法上传,于是,整个命令出来了:
git filter-branch --tree-filter 'rm -rf files_to_remove' --prune-empty -f HEAD --all
命令挺复杂的,所以我是在一个 clone 出来的仓库里先试运行。先解释下各个参数:
试运行了几次,看到 40 多次提交逐一被重写,然后检查下,发现要删除的文件确实被删除了。于是高兴地到 github 建立新仓库,并上传了。
折腾完毕,我更加喜欢 git 了 :-)
但是,今天,我不得不用了,因为我想把我的原来写一些代码放到 github 上去公开。由于之前没想过要公开,到上传时才发现不能上传大于50M的文件。
折腾了半天,还是无法上传,于是,整个命令出来了:
git filter-branch --tree-filter 'rm -rf files_to_remove' --prune-empty -f HEAD --all
命令挺复杂的,所以我是在一个 clone 出来的仓库里先试运行。先解释下各个参数:
--tree-filter表示修改文件列表。
--msg-filter表示修改提交信息,原提交信息从标准输入读入,新提交信息输出到标准输出。
--prune-empty表示如果修改后的提交为空则扔掉不要。在一次试运行中我发现虽然文件被删除了,但是还剩下个空的提交,就查了下 man 文档,找到了这个选项。
-f是忽略备份。不加这个选项第二次运行这个命令时会出错,意思是 git 上次做了备份,现在再要运行的话得处理掉上次的备份。
--all是针对所有的分支。
试运行了几次,看到 40 多次提交逐一被重写,然后检查下,发现要删除的文件确实被删除了。于是高兴地到 github 建立新仓库,并上传了。
折腾完毕,我更加喜欢 git 了 :-)
相关文章推荐
- 初次使用 git 的“核弹级选项”:filter-branch 从仓库中删除文件
- 初次使用 git 的“核弹级选项”:filter-branch 从仓库中删除文件
- 初次使用 git 的“核弹级选项”:filter-branch 从仓库中删除文件
- 初次使用 git 的“核弹级选项”:filter-branch 从仓库中删除文件
- git的安装和使用Mac版本,本地代码仓库文件的删除和重新导入代码
- 使用git删除远程仓库文件
- git在本地仓库直接使用rm彻底删除文件,服务端还是存在
- git在本地仓库直接使用rm彻底删除文件,服务端还是存在
- git在本地仓库直接使用rm彻底删除文件,服务端还是存在。(已解决)
- 在使用git的时候,删除了本地仓库的许多文件的时候引起错误。
- 解决SVN误操作--使用Git仓库中恢复已删除的分支、文件或丢失的操作
- 从Git仓库中恢复已删除的分支、文件或丢失的commit
- 如何使用.gitignore文件删除掉已经提交的文件
- git使用之删除文件
- Git 删除远程仓库文件
- 如何永久删除git仓库中敏感文件的提交记录
- git 基本使用,初始化本地仓库,创建文件,add文件,commit文件,git版本穿梭
- 从Git仓库中恢复已删除的分支、文件或丢失的commit
- 1git命令的使用,查看git仓库状态,添加文件到git跟踪,git提交,查看git分支,查看git仓库日志信息,切换git分支,解决git分支合并后出现冲突的问题