git reset --hard HEAD 后恢复暂存区文件

1、参考资料

  1. git reset–hard后恢复暂存区文件
  2. git reset–hard后恢复暂存区(未提交)文件
  3. 关于git reset --hard这个命令的惨痛教训

2、前言

我 TM 脑子被驴踢了,添加了一些文件,没有配置 .gitignore 文件直接执行了 git add .,导致一些本不该添加到 git 版本管理的文件被加入了跟踪缓存区。

本来使用 git rm --cached 文件通配符 就能解决的事情,我手欠加脑袋抽风,执行了 git reset –hard HEAD 命令,重置了工作区和暂存区,回来一看,自己码了一天的代码全没了。。。

哇哦,小拳拳锤自己胸口

3、解决办法

find .git/objects -type f | xargs ls -lt | sed 60q 命令

该命令可以找回最近的 60 次 git add 提交的文件,但对于没有 add 过的文件,抱歉,尸骨无存~

git cat-file -p ID > recover.txt 命令

该命令可以将 ID 所示的文件读取出来重定向保存到 recover.txt 文件内,那有同学就会问了:老湿老湿,你怎么知道一定时 .txt 文件?别着急,后面会讲~


提交的文件 ID

ID 是 objects 后面的一串东西(去掉 /),比如 -r--r--r-- 1 Heygo 197609 1706 Feb 5 10:52 .git/objects/37/755585613dbd77013b8c86abab558097794314 的文件 ID 为 37755585613dbd77013b8c86abab558097794314


恢复文件

执行 git cat-file -p ID > recover.txt 命令后,在 git 仓库的主目录下可以找到恢复的文件

判断文件类型

恢复图片或文档

将 recover.txt 文件用 Sublime Text 软件打开,发现是二进制文件,可以尝试修改其后缀名,我这里原本是有一个 .ico 文件,因此我将其后缀名修改为 .ico

哇哦,好起来了


恢复文本文件

将 recover.txt 文件用 Sublime Text 软件打开,发现是文本文件,可根据其内容修改后缀名,这里是 .bat 批处理文件


  1. 重复执行如上操作恢复近期被删除的文件,
  2. .pack 文件是 git 自带的文件,无需恢复。.git/objects/pack/.pack为压缩后的文件,把 .git/objects/ 下松散的文件进行了压缩,.git/objects/pack/.idx 为压缩后的索引,方便快速在压缩的文件里找到某个文件

4、总结

git reset --hard 要慎用,因为此操作会清空工作区和暂存区,如果我们只执行了 git add 命令将文件提交到暂存区,还没有执行 git commit 命令将文件提交到本地库,那就哦豁

代码要及时 commit!代码要及时 commit!代码要及时 commit

git reset --hard HEAD 后恢复暂存区文件相关推荐

  1. git pull 是到工作区还是暂存区_每天一Git之简单理解工作区和暂存区

    每天一Git之简单理解工作区和暂存区 1. 工作区与暂存区命令初体验 1.1. 暂存区文件与文件夹管理 [root@number ~]# cd GitDir/git_learning/ [root@n ...

  2. Git使用汇总之工作区、暂存区、版本库

    前言 初次接触git的时候最让人迷惑的无非是这三者的概念和他们之间的关系,搞懂这三个概念和他们之间的关系,可以说你对git了解已经三分熟了. 下面这个图展示了工作区.版本库中的暂存区和版本库之间的关系 ...

  3. git 将暂存区文件提交_Git知识

    Git 快速开始 一. 下载git 地址 : https://git-scm.com/downloads 二.git基础 1.git config 相关命令 # local 只对某一个仓库有效git ...

  4. git 将暂存区文件提交_git 暂存区

    一.Git基本工作流程 1.初始化一个仓库 git  init git  clone git仓库分为两种情况: 第一种是在现有项目或目录下导入所有文件到 Git 中: 第二种是从一个服务器克隆一个现有 ...

  5. git 将暂存区文件提交_git文件状态,暂存与提交

    git中文件的状态有两种:已跟踪或者未跟踪. 从现有目录中创建git仓库 git init git仓库(repository),也叫做版本库.使用git的目的是管理项目,并且保存一些随时间变化的文件. ...

  6. 16、git删除暂存区文件

    一.查看文件 git status -s 二.删除文件 git rm --cached (文件路径)只删除暂存区文件 git rm --f(文件路径)删除暂存和物理文件

  7. git 将暂存区文件提交_git基础命令之提交文件

    原标题:git基础命令之提交文件 测试百晓生 ceshibaixiaosheng 测试圈懂的最多的人,跟着百晓生一起学测试,你定会有收获.我就在你的口袋,你--有问题难得倒我吗? PS:一颗安利,百晓 ...

  8. Git-删除暂存区文件

    Git命令: git rm --cached <file> 当我们使用 git add 命令添加工作区的文件到暂存区时,我们想要对这个暂存区里面的文件执行删除操作时,我们则使用 git r ...

  9. Git 工作区恢复暂存区操作总览

    如何让工作区的全部文件恢复为和暂存区一样? 应用场景: 在工作区我做了一版文件优化的操作,将工作区优化的文件添加至暂存区,先不进行提交:然后,在工作区又对优化版本进行修改,但是测试效果,还不如以前添加 ...

最新文章

  1. 关于web爬虫的tips
  2. [转帖]看完这篇文章你还敢说你懂JVM吗?
  3. 使用jsp循环查询mysql_[JSP] 创建mysql数据库利用JSP进行数据库查询(1)
  4. linux pandas教程_这7种Python的全新玩法,你们一定不知道!(附赠Python教程)
  5. Houdini技术体系大纲
  6. linux 如何选择新的内核,如何更新内核??__boot_内核_vmlinuz_linux_System__169IT.COM
  7. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platf...
  8. php获取mysqli_query内容,PHP mysqli_query() 函数 - PHP 基础教程
  9. 普通版Mobaxterm查看保存的密码明文
  10. numpy 折线图绘制(参考)
  11. 云脉H5文档管理系统之文件管理的共享与协作
  12. Linux Centos8 安装Minio开机启动并Nginx代理访问
  13. 原理分析:安卓手机桌面长按分享,安卓发送软件apk,qq发送软件apk 原理
  14. Java基础(飞机大战小游戏)
  15. vue2.x使用jodit富文本编辑器,并配置自定义字体和中文
  16. c语言习题字符指针作函数参数
  17. 数据仓库面试题整理(一)
  18. protobuf版本问题
  19. Supplier示例
  20. 用Python做gif动图

热门文章

  1. Visual Studio Code(VSCODE)语言设置
  2. IntelliJ Idea 常用快捷键 超实用!
  3. android弹窗不能手动关闭_Android弹窗的实现及相关bug
  4. 30 岁成 AI 顶尖科学家,这位阿里副总裁厉害了
  5. 招人啦!安卓/Java/数据库/测试等一大波岗位袭来
  6. 还在用print()查找错误?日志消息不香嘛? | 原力计划
  7. iRobot 的 30 年成长史
  8. 中国开发者真实画像:Java长盛,偏爱Windows操作系统,鲜少参与开源项目
  9. 通过 .git 目录深入理解 Git!
  10. Go语言潜力有目共睹,但它的Goroutine机制底层原理你了解吗?