初次使用 git 的“核弹级选项”:filter-branch 从仓库中删除文件

当初看 Pro 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 了 :-)

时间: 2024-08-25 12:56:56

初次使用 git 的“核弹级选项”:filter-branch 从仓库中删除文件的相关文章

整理删除Git仓库中的文件

第一步 : 首先切换到master分支下     $  git checkout master 第二步 : 将远程仓库中的文件拉取下来     $ git pull origin master 第三步 : 查看master分之下的文件        $ dir 第四步 : 删除文件            $ git rm -r --cached 文件名 第五步 : 提交操作          $ git commit -m '描述' 第六步: 更新master分支      $ git push

Git使用七:修改最后一次提交、删除文件和重命名文件

修改最后一次提交: 在实际开发中,可能会遇到以下两种情景:情景一:版本刚一提交(commit)到仓库,突然想起漏掉两个文件还没有添加(add).情景二:版本刚一提交(commit)到仓库,突然想起版本说明写得不够全面,无法彰显你本次修改的重大意义…… 执行带 --amend 选项的 commit 提交命令,Git 就会“更正”最近的一次提交. 之前修改的文件只是提交到了暂存区,并没有提交到仓库 执行:git commit --amend就会进入到此次提交版本的编辑说明中 也可以直接git com

git 从版本控制中删除文件及.gitignore的用法

刚开始用git的时候,喜欢用git add *把所有文件都加入到版本管理中. 后来发现,因为我在virtualenv下面创建的内容,在跑测试的时候,会产生__pycache__文件夹,里面的很多东西都不需要纳入版本管理中,于是就想把它删掉. 一般来说,用的是git rm命令,比如 git rm -r __pycache__ 但是它会直接删掉硬盘上的文件,我们可以加上-n参数查看他会删掉哪些文件. (.venv) [[email protected] SocialMatrix]# git rm -

使用 .gitignore 忽略 Git 仓库中的文件

.gitignore 在Git中,很多时候你只想将代码提交到仓库,而不是将当前文件目录下的文件全部提交到Git仓库中,例如在MacOS系统下面的.DS_Store文件,或者是Xocde的操作记录,又或者是pod库的中一大串的源代码.这种情况下使用.gitignore就能够在Git提交时自动忽略掉这些文件. 忽略的格式 # :此为注释 – 将被 Git 忽略 *.a :忽略所有 .a 结尾的文件 !lib.a : 不忽略 lib.a 文件 /TODO :仅仅忽略项目根目录下的 TODO 文件,不包

git使用命令行拉取远程代码仓库中的分支至本地

1.本地创建文件夹用于存放拉取的代码 2.执行git init初始化文件夹 3.与远程代码仓库建立连接 git remote add origin [email protected]/nothing.git(远程代码仓库链接地址) 4.切换分支拉取代码(wyl为远程代码仓库分支名) git fetch origin wyl(更新分支最新状态) git checkout -b wyl(切换分支) git pull origin wyl(拉取代码) 原文地址:https://www.cnblogs.

Git Day02,工作区,暂存区,回退,删除文件

1st,工作区回退:2st,暂存区回退:3rd,删除文件:

怎样从本地删除git远程仓库里面的文件

https://jingyan.baidu.com/article/2a1383288e2ba5074a134fb5.html git是大家通用的一种版本控制系统,便捷高效,各种命令需要牢记,今天小渔介绍给大家的是git的删除命令,即将文件从远程仓库中删除的操作. 方法/步骤 1 首先,我们打开自己的本地GIT仓库,在根目录下右击鼠标,选择git bash选项. 2 进入到我们的git命令行页面后,先将远程代码pull到本地,保持本地仓库跟远端仓库同步. 3 然后我们使用git rm命令删掉要删

记录--git命令行上传项目到github仓库

由于公司一直使用的是的SVN,基本上都是内网,原来的git命令都快忘记了,当然也是自己太懒,平时都是直接拖到github上.今天打开idea后突然看到了原来自己写好的一个项目,就想将它上传到github上,也顺便再复习一下git命令,没想到也是遇到了很多坑,也是参考了几个大神的博客才解决,因此想记录一下. 因为项目是之前写好的,一直放在idea的工作空间里,git是之前已经下好的,包括github上仓库已经建好,万事俱备. 1.首先是打命令行窗口 ,cd到项目的目录中 yht:~ YHT$ cd

Git下从本地添加项目到远程仓库遇到的问题

在GitHub上新建一个bookstore仓库,然后初始化后,仓库中只存在README.MD文件. 在本地新建Git仓库: 1.mkdir bookstore 2.cd bookstore 3.git init 4.将文件添加进去(file) 5.git add file1 file2 file... 6.git commit -m "add files" 7.git remote add origin [email protected]:hahaha/project.git 8.gi