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

已从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
  • git 使用之remote: File size 104.090MB, e

    ,任何git项目遇到这个问题报错均可通用解决方案要解决这个问题,你需要从 Git 历史记录中删除这个大文件,然后再次推送你的更改。...从历史记录中删除大文件: 你可以使用 git filter-repo 来从历史记录中删除这个文件。...如果你还没有安装 git filter-repo,可以通过以下命令安装:pip install git-filter-repo然后,使用以下命令从历史记录中删除这个文件: git filter-repo...m "删除了大文件"强制推送更改: 最后,强制推送更改到远程仓库:git push origin master --force如果在第二步 遇到Aborting: Refusing to destructively...git clone https://gitee.com/youyacao/www.youyacao.com.git cd www.youyacao.com移除大文件: 在新的克隆仓库中移除大文件。

    19710

    被吐槽 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次提交之多

    1.1K30

    Git 拉取合并代码流程和多人协同开发的问题解决方法

    提交到远程仓库 将本地仓库的更改推送到远程仓库,通常是推送到master分支: git push origin master 6....完成合并 最后,将解决冲突后的更改推送到远程仓库: git push origin master 其他git开发中的问题 忘记拉取最新代码: 问题: 在开始工作之前,未拉取最新代码,导致基于过时版本进行开发...解决方法: 使用 .gitignore 来排除敏感文件,或使用 git rm --cached 将文件从版本控制中移除。 误删除文件: 问题: 误删除了重要文件。...解决方法: 使用 git config 来检查和修改全局和本地的Git配置,确保它们正确设置。 大文件和Git LFS: 问题: 将大文件(如二进制文件)纳入版本控制可能导致存储和性能问题。...解决方法: 使用Git LFS(Large File Storage)来处理大文件,将它们从Git仓库中分离出来,以减小仓库大小。 网络问题: 问题: 在推送或拉取时遇到网络问题。

    13610

    代码版本管理笔记 | 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/...并强制刷新到所有分支,这里推送到远程仓库需要有强制推送权限。

    58120

    如何删除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的优势,提高开发流程的效率。

    1.1K20

    如何存储 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.6K52

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

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

    38030

    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】Git 命令参考手册

    别名]/[分支] # 仅使用快进 $ git merge --ff-only [别名]/[分支] 6.3 推送本地分支到远程仓库 $ git push [别名] [分支] 6.4 拉取并合并远程仓库的最新提交...重命名分支 11.1 重命名当前分支 $ git branch -m 11.2 推送并重设远程分支 $ git push origin -u 11.3 删除远程分支 $ git...使用 Git hooks 23.1 查看和配置 Git hooks Git 支持多种钩子(hook),如在提交前检查代码或在推送之前进行某些操作。这些钩子位于 .git/hooks 目录中。...Git LFS(大文件存储) 26.1 安装 Git LFS $ git lfs install 26.2 跟踪大文件类型 $ git lfs track "*.psd" 26.3 提交大文件 $ git...Git 性能优化 27.1 清理仓库历史 $ git gc --aggressive 27.2 删除不需要的分支 删除本地和远程不再使用的分支,以保持仓库的整洁和性能。

    28610

    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 的指针文件是一个文本文件

    84140

    化繁为简的企业级 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 兜底回滚方案 因为使用了备份仓库,所以不会修改原始仓库,但只有代码管理平台

    99151

    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虽然有效,但许多使用它的团队发现其管理起来较为困难。

    55520

    IDEA中Git版本回退终极指南:Reset与Revert双方案详解

    IntelliJ IDEA集成了强大的Git工具链,但面对reset和revert两种核心回退方案,许多开发者仍存在选择困惑。本文将解析Reset与Revert两种方案的操作细节及避坑指南。...在强制推送远程仓库前,都可以通过更新代码恢复上面的版本回退 方式一(不推荐) git push --force 是强制推送命令,它会将本地分支的内容强行推送到远程仓库,覆盖远程分支的历史记录。...使用此命令时,如果远程分支的提交历史与本地分支不同,推送操作仍会进行,并且不会进行任何检查,可能会丢失远程仓库中的更改。因此,这个命令需要小心使用,尤其在多人协作的情况下,可能会覆盖他人的更改。...1.2、提交新版本 自动生成Revert "原提交信息"的新提交,需要推送至远程(相当于我们手动点进这个文件,把添加a的代码删除,然后提交推送) 2、命令行操作 # 撤销单个提交 git revert...62b47d9 # 推送当前分支到远程仓库 git push origin 分支 总结 Git版本回退有两种主要方案:Reset通过移动HEAD指针直接回退,适用于本地或强制同步远程,Revert

    63910

    从这里开始了解Git

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

    13710

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

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

    1.6K20
    领券