首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Git: 掉坑记 -- git reset 杀手

Git: 掉坑记 -- git reset 杀手

作者头像
Mokwing
发布2020-09-08 11:17:56
6110
发布2020-09-08 11:17:56
举报
文章被收录于专栏:MokwingMokwing

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,到这里就把遇到的问题解决了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • git reset --hard 了怎么办?
  • 掉坑起因
  • 解决方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档