首页
学习
活动
专区
工具
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
  • 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移除大文件: 在新的克隆仓库中移除大文件。

    18010

    被吐槽 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仓库中分离出来,以减小仓库大小。 网络问题: 问题: 在推送或拉取时遇到网络问题。

    13010

    代码版本管理笔记 | 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】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:高效管理大型文件的利器

    在进行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命令或克隆仓库的常见问题,例如损坏的对象。解决方法包括检查仓库完整性、删除损坏的对象、重新克隆仓库或使用备份。

    37730

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

    55320

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

    83540

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

    99051

    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

    47110

    从这里开始了解Git

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

    13610

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

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

    1.6K20
    领券