专栏首页MokwingGit: 掉坑记 -- git reset 杀手

Git: 掉坑记 -- git reset 杀手

git reset --hard 了怎么办?

掉坑起因

项目修改完成之后,会依赖一个比较大的文件,所以这个大文件就在项目根目录中,使用 git 的时候,直接 git add、git commit、git push 一键三连,等到 git push 后就会提示文件过大,超过100M。 由于技术太菜,经过谷哥和度娘的帮助下,我成功通过以下命令回撤了版本:

# 1、查看提交日志
git log

# 2、选择提交id后
git reset --hard id

然后,一看本地项目,卧*,被删的一干二净,然后在仔细看到别的博客中说到,这个命令之后,本地文件会被删除,需要谨慎使用。再次使用 git log 查看的时候,撤回到指定id版本,在其后提交的内容已经不存在了。这里就不能再使用 git reset --hard 这个命令再跳回到最后提交版本中。

解决方法

但是,别慌,方法总比问题多。解决这个问题其实也很简单:

# 1、使用reflog查看记录
git reflog

# 2、使用 reset 跳回最后版本,id 就是显示在最前面的那个你提交的版本号,根据实际情况恢复你自己的内容
git reset --hard id
# 注: 一般这里,就可以把之前删的文件恢复了,如果没有,执行下面命令

# 3、checkout, file 就是你项目名称
git checkout file/

但是,上面这些内容只是解决了如何恢复已经commit后删除的内容,但是没有解决之前大文件的问题,这里进行 push 的话还是会不行,所以我们需要进行下面操作:

# 1、找到你的大文件, 显示10个最大的文件id列表
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -10

# 2、根据文件id查询文件路径,如果你已经知道路径,则可以直接进入第3步
git rev-list --objects --all | grep 3b08a747589895bdc995cd18ae1fe9e70abcd417

# 3、移除文件 your_file就是你的大文件
git log --pretty=oneline --branches -- your_file

# 4、删除文件历史记录
git filter-branch -f --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch your_file' --tag-name-filter cat -- --all

# 5、提交
git push --force --all

ok,到这里就把遇到的问题解决了。

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • pytest 测试框架学习(15):pytest.freeze_includes

    freeze_includes: 返回包括 cx_freeze 提供的 pytest 使用的模块名称列表。 源码:

    Mokwing
  • robotframework 学习(3) :Excel文件的操作

    上一篇博客写了一些使用RIDE来进行接口测试的一个简单demo,在里面我们可以发现传输的数据都是写死在里面,如果需要从外面传输就需要进行参数化。...

    Mokwing
  • 性能测试(2): 测试工具 -- JMeter 安装和中文设置

    http://jmeter.apache.org/download_jmeter.cgi

    Mokwing
  • git以及github的使用(1)

    http://my.oschina.net/bxxfighting/blog/378196

    bear_fish
  • 将 HEXO 部署到VPS

    hexo 可以部署在github,conding。当有了一个 vps 之后可以把 hexo 部署到 vps ,步骤如下:

    tanmx
  • Terminal配置

    若想要源代码可以参考我的GitHub:https://github.com/SeptemberBeryl/wire/blob/master/README.md,...

    Centy Zhao
  • 让Git不再难学

    在团队做过软件开发的,版本控制必是不可或缺的一项。目前,版本控制主要分为集中式版本控制系统和分布式版本控制系统 ,即大家熟知的SVN和Git。Git是当下最流行...

    Jacklin999
  • Git

    歪先生
  • 使用git自动部署简单网站

    本文作者:IMWeb yangchunwen 原文出处:IMWeb社区 未经同意,禁止转载 要做什么 假设你有一个博客,有一台网站服务器(或者很多台作...

    IMWeb前端团队
  • Git知识总览(一) 从 git clone 和 git status 谈起

    本篇博客是整理git相关知识的第一篇,因为之前一直是用SourceTree对Git的命令行操作用的不是特别熟,于是乎过了一遍ProGit(链接:https://...

    lizelu

扫码关注云+社区

领取腾讯云代金券