从 Git 版本库中删除文件的历史记录

作者: , 共 389 字 , 共阅读 0

有时候不小心把一些大文件 commit 到了本地版本库,但往网络版本库同步时,因为文件过大被拒绝。如果在上传前,本地有多次提交,此时再在当前版本里删除这些大文件还不够,还需要把历史记录全删掉。效果要跟从来没提交过这些文件一样。

# 删除匹配文件
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch *.zip'

# 回收空间
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
du .git -lsh

# 同步到网络
git push origin master --force

Q. E. D.

类似文章:
编程 » GIT
git经常出现类似于HEAD detached at origin/development的错误提示。这是因为当前的 HEAD 没有位于任何一个分支上的缘故。
IT » GIT
分为三步。最简单的:
相似度: 0.190
IT » GIT, proxy
大部分设置都是通过git config命令实现的:
相似度: 0.166
IT » GIT
GIT 的一个很大的问题是没有权限划分,所有人对项目下所有东西都有(查看)权限(只能设置分支的推送权限),无法对特定文件和文件夹设置单独的权限。这个功能只能借用 SUBMODULE 来实现。
IT » git
如果还没有执行git add,此时被认为尚未暂存以备提交的变更,git status结果如下:
IT » git
分支是一条线,随着开发进度一直往前推进,可以分叉、合并等。
IT » Linux
假设一个目录下有很多很多".bak"文件,如果我们直接用rm命令删除:
IT » gitlab, git
用 gitlab 搭建的 git 私有服务器,占用空间不断增长,已高达 400G。仔细检查了一下,真正的库数据/var/opt/gitlab/git-data/repositories只有 7 个 G ,真正占用空间的是/var/opt/gitlab/prometheus/data,占用了将近 400G ,里面很多 80M 一个的大文件。
IT » gnu, Linux
简单列一些 Linux 自带的 GNU 命令的常用用法,可以当做 cheatsheet 使用。
相似度: 0.057
IT » github
github 自从废除用户名密码直接登录之后,就乱了很多。直接用户名密码会提示:
编程 » GIT
git经常出现类似于HEAD detached at origin/development的错误提示。这是因为当前的 HEAD 没有位于任何一个分支上的缘故。
编程 » Linux, Vim, 字符编码
由于 UNICODE 的优势,目前推荐都用 UTF-8 进行编码。