Git永久删除历史文件(包含历史记录)
有些时候不小心上传了一些敏感文件(例如密码), 或者不想上传的文件(没及时或忘了加到.gitignore里的),而且上传的文件又特别大的时候,
这将导致别人clone你的代码或下载zip包的时候也必须更新或下载这些无用的文件
因此, 我们需要一个方法, 永久的删除这些文件(包括该文件的历史记录).
Git永久删除历史文件(包含历史记录)
- 1 查找文件名称
- 2 从资料库中删除文件
- 3 推送我们修改后的repo
- 4 清理和回收空间
1 查找文件名称
如已知文件名称,忽略此步骤。
# 查找最大的5个文件
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"
2 从资料库中删除文件
git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch path-to-your-remove-file' --prune-empty --tag-name-filter cat -- --all
其中, path-to-your-remove-file 就是你要删除的文件的相对路径(相对于git仓库的跟目录), 替换成你要删除的文件即可. 注意一点,这里的文件或文件夹,都不能以 ‘/’ 开头,否则文件或文件夹会被认为是从 git 的安装目录开始。
如果你要删除的目标不是文件,而是文件夹,那么请在 git rm --cached' 命令后面添加 -r 命令,表示递归的删除(子)文件夹和文件夹下的文件,类似于
rm -rf` 命令。
此外,如果你要删除的文件很多, 可以写进一个.sh文件批量执行, 如果文件或路径里有中文, 由于MinGW或CygWin对中文路径设置比较麻烦, 你可以使用通配符号, 例如: sound/music_.mp3, 这样就把sound目录下以music_开头的mp3文件都删除了.
例如这样, 新建一个 bash 脚本文件,del-music-mp3.sh:
#!/bin/bash
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch projects/Moon.mp3' --prune-empty --tag-name-filter cat -- --all
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch sound/Music_*.mp3' --prune-empty --tag-name-filter cat -- --all
如果你看到类似下面这样的, 就说明删除成功了:
Rewrite 48dc599c80e20527ed902928085e7861e6b3cbe6 (266/266)
# Ref 'refs/heads/master' was rewritten
如果显示 xxxxx unchanged, 说明repo里没有找到该文件, 请检查路径和文件名是否正确.
注意: 补充一点, 如果你想以后也不会再上传这个文件或文件夹, 请把这个文件或文件夹添加到.gitignore文件里, 然后再push你的repo.
3 推送我们修改后的repo
## 以强制覆盖的方式推送你的repo, 命令如下:
git push origin master --force --all## 这个过程其实是重新上传我们的repo, 比较耗时, 虽然跟删掉重新建一个repo有些类似, 但是好处是保留了原有的更新记录, 所以还是有些不同的. 如果你实在不在意这些更新记录, 也可以删掉重建, 两者也差不太多, 也许后者还更直观些.## 为了能从打了 tag 的版本中也删除你所指定的文件或文件夹,您可以使用这样的命令来强制推送您的 Git tags:git push origin master --force --tags
4 清理和回收空间
虽然上面我们已经删除了文件, 但是我们的repo里面仍然保留了这些objects, 等待垃圾回收(GC), 所以我们要用命令彻底清除它, 并收回空间.
命令如下:
rm -rf .git/refs/original/git reflog expire --expire=now --allgit gc --prune=nowgit gc --aggressive --prune=now
现在你再看看你的.git目录文件大小是不是变小了.
Git永久删除历史文件(包含历史记录)相关推荐
- linux git 撤销删除文件,删除文件以后,如何通过git撤销删除的文件,不提交到远端代码库...
检查状态,看看发生了什么: $ git status On branch master Changed but not updated: (use "git add/rm ..." ...
- 怎么找回永久删除的文件
每天上班我们都要处理各种文件,如PPT.Excel.图片等类型.这些文件虽然保存在电脑里,但删除时难免会有一些错误.如果我们不小心把文件永久删除了,该怎么办呢?又该怎么找回永久删除的文件?这里小编整理 ...
- Win10永久删除的文件怎么恢复?实用指南!
案例:怎么恢复win10永久删除的文件? [今天我使用电脑时不小心把一些非常重要的文件永久删除了!这可怎么办!我的电脑是win10系统的,想问问各位使用win10的小伙伴,有什么新手也可以操作的好用方 ...
- Git 彻底删除大文件
Git 彻底删除大文件 Tags: <git> pyecharts 的 git history 中存在着很多以前文档需要的图片,导致 pyecharts 整个 git 仓库体积达到 90M ...
- 电脑上永久删除的文件怎么恢复?其实很简单
永久性删除文件,是指彻底删除回收站的文件,或者对文件执行了shift+delete.这个文件就不可见了,但其实电脑还存储着这个文件.接下来本篇文章就为你演示,电脑上永久删除的文件怎么恢复. 方法一:通 ...
- 不小心永久删除的文件怎么恢复?被永久删除的文件还能找回吗
不小心永久删除的文件怎么恢复?在删除文件时可能一个不小心就把重要文件也给删除了,如果文件刚删除那还好办,我们直接在回收站里进行还原就行,通常来说被删除的文件都会临时保存在回收站里,方便我们在发现文件删 ...
- sql delete删除的数据怎么恢复_如何恢复按下Shift + DELETE键永久删除的文件和资料夹?...
简单删除和Shift+Delete永久删除 想删除电脑上的任何文件,有以下两种方式: ① 按「DELETE」键简单删除文件.在这种模式下,文件被移动到回收站.此时,如果我们想要恢复已删除的文件和资料夹 ...
- 远程mysql定时删除数据_mysql定时备份数据库 删除历史文件 将备份数据库传送到另外服务器...
定时备份数据库脚本并压缩删除历史文件 1.创建备份脚本 vim mysql-backup.sh #!/bin/bash bak=`date +%y-%m-%d-%H` tool=/usr/loca ...
- 永久删除的文件还能找回来吗 永久删除的文件如何恢复
在日常生活和工作中,我们经常需要处理各种文件.有时,我们可能会误删除重要文件,甚至执行了永久删除操作.那么,永久删除的文件还能找回来吗?如果可以,永久删除的文件如何恢复?接下来就来为大家讲解一下吧. ...
最新文章
- EOJ Monthly 2018.1
- hmr webpack 不编译_一文搞懂 webpack HMR 原理
- xgboost算法_详解xgboost算法的样本不平衡问题
- Linux下查看进程和线程
- java虚拟机读写其他进程的数据
- mac如何看html5视频播放器,苹果Mac系统看HTML5视频教程介绍
- avro 序列化java_Avro 对象序列化与反序列化,及转Json对象序列化处理
- Linux性能分析之网络篇
- Qtum研究院:市面上企业级解决方案都有哪些亮点?
- Android 实现RecyclerView长按弹出Menu 点击删除
- nginx limit配置参数解读
- USBCNC导入DXF文件
- python开发grasshopper插件_Rhino_Grasshopper_Python 开发的正确姿势
- html富强民主鼠标特效,给网站添加鼠标点击特效富强、民主、和谐 js效果 - 寒星皓月...
- Cherno C++ P61 C++的命名空间
- 解决1 error and 0 warnings potentially fixable with the `--fix` option.
- Python爬虫之App爬虫视频下载
- TTS离线语音合成应用方案【一】
- 2022年9月大学英语B统考题库网考大学英语B试题
- 兼职项目分享,在家就可以做的八个副业项目,利用业余时间增加收入吧