首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

已从Git仓库中删除大文件,但仍无法推送

当你从 Git 仓库中删除了大文件,但仍然无法推送时,可能是因为这些大文件仍然存在于 Git 的历史记录中。Git 的历史记录会保留所有提交的更改,即使你在后续的提交中删除了文件,这些文件仍然会存在于历史记录中。

要彻底从 Git 仓库中删除大文件,你需要从历史记录中移除它们。以下是一些步骤,帮助你从 Git 历史记录中删除大文件,并成功推送到远程仓库。

1. 使用 git filter-branch(不推荐)

git filter-branch 是一个强大的工具,但它有一些缺点,比如速度慢和容易出错。尽管如此,这里是一个示例:

代码语言:javascript
复制
git filter-branch --force --index-filter \
  'git rm --cached --ignore-unmatch path/to/largefile' \
  --prune-empty --tag-name-filter cat -- --all

2. 使用 BFG Repo-Cleaner(推荐)

BFG Repo-Cleaner 是一个更快、更简单的工具,用于从 Git 仓库中删除大文件或敏感数据。你可以按照以下步骤使用它:

2.1 安装 BFG Repo-Cleaner

你可以从 BFG Repo-Cleaner 的 GitHub 页面 下载 BFG Repo-Cleaner 的 jar 文件。

2.2 使用 BFG Repo-Cleaner 删除大文件

假设你已经下载了 bfg.jar 文件,并且你想要删除大于 100MB 的文件:

代码语言:javascript
复制
# 删除大于 100MB 的文件
java -jar bfg.jar --strip-blobs-bigger-than 100M my-repo.git

或者,如果你知道具体的文件路径:

代码语言:javascript
复制
# 删除特定文件
java -jar bfg.jar --delete-files 'path/to/largefile' my-repo.git

2.3 清理和推送更改

运行 BFG Repo-Cleaner 后,你需要清理和推送更改:

代码语言:javascript
复制
# 进入你的仓库目录
cd my-repo

# 清理仓库
git reflog expire --expire=now --all && git gc --prune=now --aggressive

# 强制推送更改到远程仓库
git push origin --force --all
git push origin --force --tags

3. 使用 git filter-repo(推荐)

git filter-repo 是一个新的工具,旨在替代 git filter-branch,并且更快、更易用。你可以按照以下步骤使用它:

3.1 安装 git filter-repo

你可以使用 pip 安装 git filter-repo

代码语言:javascript
复制
pip install git-filter-repo

3.2 使用 git filter-repo 删除大文件

假设你想要删除特定文件:

代码语言:javascript
复制
git filter-repo --path path/to/largefile --invert-paths

3.3 清理和推送更改

运行 git filter-repo 后,你需要清理和推送更改:

代码语言:javascript
复制
# 清理仓库
git reflog expire --expire=now --all && git gc --prune=now --aggressive

# 强制推送更改到远程仓库
git push origin --force --all
git push origin --force --tags

注意事项

  1. 备份仓库:在进行任何历史记录重写操作之前,确保你已经备份了你的仓库。
  2. 通知团队:如果你在一个团队中工作,确保通知所有团队成员,因为历史记录的重写会导致他们的本地仓库与远程仓库不同步。
  3. 强制推送:历史记录重写后,你需要强制推送更改,这可能会覆盖远程仓库的历史记录。

通过这些步骤,你应该能够从 Git 仓库中彻底删除大文件,并成功推送到远程仓库。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Git+Gerrit如何永久删除历史文件(大文件私密文件)

一、前言 前几天同事在拉取一个项目的Git仓库时,发现项目拉取速度非常慢,半个钟都无法拉取下来,并且发现一直卡在了99%的进度上。 ?...因为远程仓库大文件的提交记录依然存在,这样删除只是将产生了一个新的提交记录,将当前commit中大文件去掉而已,随时可以回滚回来,pull的时候依然会将大文件的历史记录拉取下来。...git reset --soft命令一样是无法将提交记录从仓库抹掉的,虽然通过reset之后,大文件的提交记录在git log已经查找不到,实际上,这个记录并不会真正的从仓库删除,只要能找到commit...推送权限出错 推送不上去,由于配置了gerrit,普通权限的开发人员是无法直接推送到远程仓库的,否则gerrit就形同虚设了呀。那么就来看看gerrit可以配置那些权限。...clone成功 终于可以轻松的拉取仓库,并且只有41.42M,至此,终于将错误推送到远程仓库的超大文件删除,可以轻松愉快的拉取仓库了。

2.6K20
  • 被吐槽 GitHub仓 库太大,直接 600M 瘦身到 6M,这下舒服了

    翻了翻各个项目发现里边的确有许多应该忽略的文件.idea、.mvn、target都被我提交了,直接删除文件,并没有什么卵用,项目整体size变化不大,应该不是这些文件的原因。...瘦身利器尽管我们知道了大文件的位置,可具体该删除哪些文件无从下手啊,objects目录下都是些压缩文件,弄不好整个仓库都得报废。...图片4、删除大文件使用--delete-files命令逐一的将大文件删除,如果提示分支是被保护的可以加上--no-blob-protection命令执行。...GC 回收垃圾上边我们虽然过滤、删除大文件,此时仓库的大小仍然没有变化,进入Springboot-Notebook.git仓库内,执行 git reflog expire 和 git gc命令,压缩...=now --aggressive# 推送$ git push最后推送代码到远程仓库,在看仓库的大小已经降到了108M,效果挺显著,剩下的108M应该就是我频繁提交导致的了,查了下我居然有127次提交之多

    1K30

    代码版本管理笔记 | Python 程序员也应该会的 Git 进阶操作

    git remote add [远程仓库自定义名字] [git 仓库地址] 接下来将代码推送至刚刚添加的远程仓库git push [远程仓库自定义名字] 我们想推送代码至新添加的远程仓库的话,...就是用上面的命令 但是我们想使用 git push 推送至新添加的远程仓库的话应该怎么操作 使用 -u 参数来修改默认的远程仓库 git push -u [[远程仓库自定义名字]] 如果想一条命令推送至多个仓库怎么操作...git branch -m develop # 使用 git push -f 强制推送至远程仓库 # 有些仓库有 master 分支保护,不允许强制 push ,需要在远程仓库项目里暂时把项目保护关掉才能推送...git push -f origin develop 清理大文件 现在需要找出大文件的对应 hash 值,这里我们找出前 5 个为例 git verify-pack -v .git/objects/...并强制刷新到所有分支,这里推送到远程仓库需要有强制推送权限。

    57320

    如何删除GIT仓库的敏感信息

    前言 正常Git仓库应该尽量不包含数据库连接/AWS帐号/巨大二进制文件,否则一旦泄漏到Github,这些非常敏感信息会影响客户的信息安全已经公司的信誉。...所以这要求对Git的签名和签入、推送要有高度的敬畏之心。 然而根据墨菲定律,可能发生的事情一定会发生。时不时,故意或失手,就会有人将这些信息写到了Git仓库。...如果代码还没有上传(git push),那可能还好说,只要将分支删除,然后重新写一下功能即可。如果已经上传了,或功能太多太复制没办法及时删除,就会后悔莫及了。...这里我将演示一个故意写满“敏感信息”的Github仓库,然后一步一步演示怎么在历史记录删除“敏感信息”,以完成“脱敏”。...注意,简单地执行git push(不带--force)是无法推送的,此时会报如下错误: ?

    3K61

    Git目录为什么这么大

    删除大文件 4.4 按照pack文件直接操作 5、大文件存储的正确方式 6、其他解决方案 7、小结 1、介绍 Git作为一个分布式的版本控制工具,在每天高频次的使用难免遇到一些问题 本文围绕git...相当于一个Patch应用在之前的项目上,借此一个项目可以回到任何一次提交时的文件状态 于是在Git删除一个文件时,Git只是记录了该删除操作,该记录作为一个Patch存储在 .git 。...删除前的文件仍然在Git仓库中保存着。直接删除文件并提交起不到给Git仓库瘦身的效果 在Git仓库彻底删除一个文件只有一种办法:重写Rewrite涉及该文件的所有提交。...仓库的提交,我们用它来列出所有提交涉及的文件名及其ID。...git仓库的,git仓库是代码仓库,存放的应该是n个代码文件(其实也可以认为是文本文件) 如果是作为仓库管理员,应该有意识的将git仓库设置一个允许的文件大小限制 如果是非变化性的大文件,可以存储到专用的文件服务器

    1.3K10

    深入了解Git LFS:高效管理大型文件的利器

    在进行push操作时,系统提示我“推送失败,以下文件大小超过单文件200MB的系统限额,大文件请使用Git-LFS管理”。于是我开始了解Git LFS。...它通过将大文件存储在单独的位置,而在Git仓库只保留引用和元数据,来减小仓库的体积。这使得Git仓库能够更快速地克隆、推送和拉取,同时有效地处理大型媒体文件、二进制文件等。.../install.sh脚本即可,这个脚本会做两个事情: 在$PATH安装Git LFS的二进制可执行文件 执行git lfs install命令,让当前环境支持全局的LFS配置 初始化仓库和跟踪大文件...同时,大文件对应的指针文件将连同其他的普通的代码文件推送到远端Git仓库。...在项目中引入Git LFS可能需要一些额外的配置和学习,一旦熟悉了其基本用法,你将能够更好地利用Git LFS的优势,提高开发流程的效率。

    84920

    GIT版本控制】--常见问题与解决方案

    在修复损坏的Git仓库时,请确保备份重要的数据。如果问题无法解决,最好从备份或远程仓库重新克隆仓库,以避免数据丢失。此外,定期备份Git仓库是一种良好的实践,可以帮助你在出现问题时快速恢复数据。...二、恢复丢失的提交 恢复丢失的Git提交可能会发生在不小心删除提交或分支、强制推送(force push)后丢失历史记录等情况下。...以下是一些常见问题和相应的解决方案,用于恢复丢失的Git提交: 常见问题: 提交被删除或分支被覆盖: 你可能不小心删除了一个提交,或者通过强制推送覆盖了一个分支,导致提交丢失。...查看GitHub或GitLab等远程仓库: 如果你的丢失的提交曾经被推送到远程仓库(如GitHub或GitLab),可以在远程仓库的历史记录查找并恢复它们。...四、总结 修复损坏的Git仓库涉及处理无法执行Git命令或克隆仓库的常见问题,例如损坏的对象。解决方法包括检查仓库完整性、删除损坏的对象、重新克隆仓库或使用备份。

    35630

    如何存储 Git 大文件

    Git LFS(Large File Storage)是由 Atlassian, GitHub 以及其他开源贡献者开发的 Git 扩展,它通过延迟地(lazily)下载大文件的相关版本来减少大文件仓库的影响...Git LFS 通过将仓库大文件替换为微小的指针(pointer) 文件来做到这一点。在正常使用期间,你将永远不会看到这些指针文件,因为它们是由 Git LFS 自动处理的: \1....当你推送新的提交到服务器时,新推送的提交引用的所有 Git LFS 文件都会从本地 Git LFS 缓存传输到绑定到 Git 仓库的远程 Git LFS 存储(即 LFS 文件内容会直接从本地 Git...关于 LFS 的指针文件: LFS 的指针文件是一个文本文件,存储在 Git 仓库,对应大文件的内容存储在 LFS 服务器里,而不是 Git 仓库,下面为一个图片 LFS 文件的指针文件内容: version...提交和推送 你可以按常规方式提交并推送到包含 Git LFS 内容的仓库

    3.5K52

    Cloud Studio 三分钟上手 Git LFS

    Git LFS(Large File Storage)是为了专门支持大文件存储的 Git 扩展,它可以通过延迟下载大文件方式有效降低 Git 仓库的压力,带来的优势如下:降低整个仓库的体积,大大提高首次...二、基本原理Git LFS 实现优化大文件存储的方式,是使用文件的指针文件替换原来的大文件,把大文件单独存储于 lfs 缓存目录。...当我们需要用到这些大文件时,Git LFS 自动会根据指针,从缓存目录检出对应真实文件。1....大文件提交仓库时当我们把大文件添加 commit 到仓库时,git 的 commit hook 会调用 Git LFS 计算出文件的 hash,然后把文件内容替换对应的指针,并把真实的文件内容存放于 `...大文件推送到远端仓库时执行 `git push` 命令时,Git 的 push hook 会调用 Git LFS,把指针文件会直接推送Git server,而另一个部分的真实的 LFS 文件会推送

    1.5K40

    Git 仓库瘦身与 LFS 大文件存储

    Git 仓库瘦身 瘦身背景:错误把大文件 push 到了远程仓库 我们可以通过以下命令或者 du -mh 查看 Git 仓库的体积,git-count-objects: # 查看仓库体积情况 git...就算知道了是哪里个文件造成的,我们直接删除那个文件是没有用的,我们还需要删除那个文件对应的 Git Object 文件。...bigfile,从日志我们可以看到本地仓库已经移除大文件成功了 ➜ git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch...objects 空间)看看瘦身效果,最后将变动推送到远程仓库即可: ➜ git reflog expire --expire=now --all && git gc --prune=now --aggressive...master -> master 开启了 LFS 之后,对应大文件的内容存储在 LFS 服务器,不再是存储在 Git 仓库Git 仓库存储的是大文件的指针文件,LFS 的指针文件是一个文本文件

    75240

    化繁为简的企业级 Git 管理实战(五):二进制大文件的版本控制

    $ git remote remove origin # 删除原来的http仓库地址 $ git remote add origin git@your-site.com:your-group/your-repo.git...方案四:使用 Git-LFS 虽然 Git 本身并不能很好地支持二进制大文件的版本控制,幸运的是已经出现了一些扩展能够帮助 Git 胜任这些工作。...我所选择的扩展就是由 Github 团队开发的 Git-LFS 。 Git-LFS 的原理并不复杂:大文件不再支持添加到仓库,而是存储到另外的 LFS 服务器上。仓库只保留这些文件的文本链接。...Git-LFS 的踩坑之旅 虽然 Git-LFS 很好地解决了大文件的版本控制问题,实际应用到实际团队时也不见得能顺风顺水。在我将它推广到团队的项目中时,就遇到了几个水土不服的问题。...不幸的是,由于下载下来的内容不再是个 Git 仓库,这些链接文件已无法恢复成实际的文件内容。

    1.9K70

    从9G到0.3G,腾讯会议对他们的git库做了什么?

    注意事项:(开发重点关注) 瘦身期间会锁库,必须提前推送代码到远端,否则需要手动同步;锁库期间无法进行 MR,且已创建 MR 会失效;因删除历史记录,会导致本地仓库与远端冲突,请恢复后重新 clone...瘦身期间会锁库,必须提前推送代码到远端,否则需要手动同步; 锁库期间无法进行 MR,且已创建 MR 会失效; 因删除历史记录,会导致本地仓库与远端冲突,请恢复后重新 clone 代码; 需要查询或处理更老的代码...将历史大文件以及未加入 lfs 的大文件进行 lfs 处理。...push 上去的风险,这样就会把瘦身前的历史记录又推送到瘦身后的 Git 仓库,造成瘦身白费。...旧的未完成的MR已经失效,需要关闭后重新发起 需要查询或处理更老的代码,需要去备份仓库查看(xxxx/xxxx.git) 10 兜底回滚方案 因为使用了备份仓库,所以不会修改原始仓库只有代码管理平台

    96951

    Git LFS 好用的大文件储存工具?

    安装 前提条件 在安装Git LFS之前,需要基于Git已经安装并配置好了SSH密钥连接到GitHub或其他代码仓库。 在Windows上,需要将Git LFS作为一个额外的包安装到Git。...git lfs install 运行以上命令,Git LFS 就被添加到了 Git 命令行。 2. 大文件跟踪 需要将大文件添加到 Git LFS 跟踪列表,才能对其进行跟踪。...在 Git 仓库所在的文件夹运行以下代码。 git lfs track "*.jar" “*.jar”代表需要跟踪的文件,类似的后缀名都可以使用。...提交代码 当您添加、修改或删除大文件时,Git LFS 将监视这些文件,并自动替换为Git LFS 指示文件。在执行添加、提交和推送操作之前,使用以下命令审核将要提交的大文件清单。...Git LFS的问题 Git LFS虽然有效,许多使用它的团队发现其管理起来较为困难。

    51220

    从这里开始了解Git

    Git 由 Linus Torvalds(Linux 的创建者)于 2005 年创建。据他所说,他构建 Git 的原因有很多,主要是因为他无法继续使用 BitKeeper 版本控制系统。...拉取(Pull) 拉取是一个 两步过程,首先从远程存储库拉取更改,然后使用来自远程分支的任何新提交更新您当前的分支。 推送(Push) 推送是 拉取的反面,因为它使用本地提交更新远程分支。...默认情况下,推送只会更新远程上的相应分支。换句话说,如果您已从主分支检出代码,您推送的任何更改只会影响该分支。...将更改推送到远程仓库。 从远程仓库拉取更改。 Git 适合所有人 我说过它不是最容易使用的工具。更复杂的是,大多数人从命令行使用 Git。...现在您已经对 Git 有了基本的了解,在接下来的几个教程,我将带您完成一个实际的 Git 工作流程,向您展示如何设置本地仓库并开始使用文件。

    13210

    git为什么不擅长处理大文件

    不幸的是,它并不影响整个本地仓库的大小,如果你有一棵巨大的文件夹树,那就很有帮助。 涉及的命令是什么?下面是一个例子。 克隆一次完整的版本库:'git clone'。...git lfs原理 Git 是一个分布式的版本控制系统,这意味着在克隆过程,整个仓库的历史都会传输给客户端。...Git LFS(大文件存储)是由Atlassian、GitHub和其他一些开源贡献者开发的Git扩展,它通过懒散地下载大文件的相关版本来减少仓库大文件的影响。...具体来说,大文件在签出过程中被下载,而不是在克隆或获取过程Git LFS通过用微小的指针文件替换仓库大文件来做到这一点。...image.png 当你推送新的提交到服务器时,新推送的提交所引用的任何 Git LFS 文件会从本地的 Git LFS 缓存转移到与你的 Git 仓库绑定的远程 Git LFS 存储。

    1.5K20

    Cloud Studio 三分钟上手 Git LFS

    Git LFS(Large File Storage)是为了专门支持大文件存储的 Git 扩展,它可以通过延迟下载大文件方式有效降低 Git 仓库的压力,带来的优势如下: 降低整个仓库的体积,大大提高首次...二、基本原理 Git LFS 实现优化大文件存储的方式,是使用文件的指针文件替换原来的大文件,把大文件单独存储于 lfs 缓存目录。...当我们需要用到这些大文件时,Git LFS 自动会根据指针,从缓存目录检出对应真实文件。 1....大文件提交仓库时 当我们把大文件添加 commit 到仓库时,git 的 commit hook 会调用 Git LFS 计算出文件的 hash,然后把文件内容替换对应的指针,并把真实的文件内容存放于...大文件推送到远端仓库时 执行 git push 命令时,Git 的 push hook 会调用 Git LFS,把指针文件会直接推送Git server,而另一个部分的真实的 LFS 文件会推送

    90730

    如何删除错误提交的 git 大文件

    早上小伙伴告诉我,他无法拉下代码,我没有在意。在我开始写代码的时候,发现我的 C 盘炸了。...那么如何把这个压缩包彻底从 git 删除? 如果需要删除 git 的历史记录,使用方法很简单,请看 Git如何永久删除文件(包括历史记录) - shines77 - 博客园 。...当然这个方法需要很长时间,因为提交大文件的时间不长,所以可以使用walterlv的方法 彻底删除 Git 仓库的文件避免占用大量磁盘空间 - walterlv 于是远程仓库删好了,但是本地仓库还是有小伙伴拉下来...删除原来分支,这样就好 最后的命令是使用 gc 清掉这个提交 这时候查看自己的git 文件夹,如果文件夹还是那么大,那么说明还有一个分支是引用提交大文件,需要自己去看一下是哪个分支。...需要说明,git 如果提交一个文件,然后删除他,继续提交,那么这个文件是存在 git ,需要使用特殊的命令才可以删除

    3.1K10

    Git:本地项目提交到GitHub及仓库管理

    推送到 别名为 origin 的仓库的 master 分支上....-u ,就是创建 upStream 上传流,如果没有这个上传流就无法将代码推送到 github;同时,这个 upStream 只需要在初次推送代码的时候创建,以后就不用创建了。...,默认拉取到 master分支(如果只是自己做这个项目,可以忽略pull) git push #将代码推送到 github , 默认推送到别名为 origin 的仓库的 master 分支上。...5.其他 如果有多个远程仓库 或者 多个分支, 并且需要将代码推送到指定仓库的指定分支上,那么在 pull 或者 push 的时候,就需要 按照下面的格式书写: git pull 仓库别名 仓库分支名...例如不慎上传了大文件git push时候会报错: error: GH001: Large files detected. this exceeds GitHub’s file size limit

    1.1K10
    领券