专栏首页林德熙的博客如何删除错误提交的 git 大文件

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

早上小伙伴告诉我,他无法拉下代码,我没有在意。在我开始写代码的时候,发现我的 C 盘炸了。因为我的磁盘是苏菲只有 256G 放了代码就没空间了,于是我查找到了原来是我的代码占用了居然有 2000+M ,寻找了很久才发现,原来我小伙伴JAKE传了一个压缩包上去,一个1G的包。 那么如何把这个压缩包彻底从 git 删除?

如果需要删除 git 的历史记录,使用方法很简单,请看 Git如何永久删除文件(包括历史记录) - shines77 - 博客园 。当然这个方法需要很长时间,因为提交大文件的时间不长,所以可以使用walterlv的方法 彻底删除 Git 仓库中的文件避免占用大量磁盘空间 - walterlv

于是远程仓库删好了,但是本地仓库还是有小伙伴拉下来,于是如何让本地的小伙伴可以使用最新的仓库?

代码就是

git fetch -f -p
git checkout dev
git reset origin/dev --hard
git reflog expire --expire=now --all
git gc --prune=now

第一句代码git fetch -f -p的作用就是从本地拿到远程最新分支,覆盖本地存放的远程分支

第二句实际上因为主要开发分支就是 dev 分支,小伙伴就是把大文件合并到这个分支,所以需要切换到这个分支。如果你不小心把大文件提交其它的分支,记得切换的就是你提交的分支。

如果提交大文件只是在自己的分支,并且放到了远程分支,那么合并到远程开发分支,那么只需要删除自己远程分支就好了,不需要继续往下做。

第三句git reset origin/dev --hard是把自己的本地 dev 分支覆盖,使用远程的分支,如果开发分支不是 dev ,那么请用其他的分支。

接下来是如果在开发之前已经拉下存在大文件的开发分支并且在他之后有提交,那么需要创建一个新的分支在合并之前。

然后把提交 pick 到新分支

删除原来分支,这样就好

最后的命令是使用 gc 清掉这个提交

这时候查看自己的git 文件夹,如果文件夹还是那么大,那么说明还有一个分支是引用提交大文件,需要自己去看一下是哪个分支。

这个命令需要所有小伙伴执行,不然有一个小伙伴提交了包含大文件的提交,那么刚才做的就是白做了。

需要说明,git 如果提交一个文件,然后删除他,继续提交,那么这个文件是存在 git 中,需要使用特殊的命令才可以删除。

感谢walterlv


本文会经常更新,请阅读原文: https://lindexi.gitee.io/lindexi/post/%E5%A6%82%E4%BD%95%E5%88%A0%E9%99%A4%E9%94%99%E8%AF%AF%E6%8F%90%E4%BA%A4%E7%9A%84-git-%E5%A4%A7%E6%96%87%E4%BB%B6.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://lindexi.gitee.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • git 需要知道的1000个问题

    如果提交出现异常 Fatal: TaskCanceledException encountered

    林德熙
  • C# 判断系统版本

    林德熙
  • C# 判断系统版本

    林德熙
  • 如何使用github给大佬递茶

    最近也是闲到没事干(误),开始给开源项目打小黑工贡献代码,当个dalao手底下的端茶党。但是看来端茶党也不是那么容易做的或许只是傻翠他智商太低跟不上,在打小黑工...

    idealclover
  • Git学习01-Learn Git Branching(在线学习工具)

    网址:https://learngitbranching.js.org/?locale=zh_CN

    帅的一麻皮
  • git的分支远程连接和远程分支的拉取推送及冲突处理

    添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删...

    不会飞的小鸟
  • 一篇读懂HTTPS:加密原理、安全逻辑、数字证书等

    本文原作者“安静的boy”,原文标题:《一篇文章读懂HTTPS及其背后的加密原理》,收录时有改动,感谢原作者。

    JackJiang
  • 一篇读懂HTTPS:加密原理、安全逻辑、数字证书等

    HTTPS(全称: Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的...

    JackJiang
  • 一份值得收藏的 Git 异常处理清单

    Git 作为一种分布式版本控制系统已经成为现在开发的宠儿,不仅应用在前端、后端、客户端等开发场景中,也成为各行业互联网企业分工协作的必备技能之一。

    政采云前端团队
  • Git和GitHub相关

      Git是一个版本控制工具   GitHub是一个用git做版本控制的项目托管平台。

    新人小试

扫码关注云+社区

领取腾讯云代金券