git add 后git reset --hard xxx的代码丢失,代码如何找回_.git/lost-found/other/-程序员宅基地

技术标签: git  git reset  git 找回文件  

原文链接:https://www.cnblogs.com/hope-markup/p/6683522.html

git add xxxx
git reset --hard HEAD
未commit,此时文件丢失。
找回操作:git fsck --lost-found,然后找到项目目录下.git/lost-found/other这个路径下的文件挨个打开找丢失的文件,文件名会变成ID号

在这里插入图片描述

先看看git reset --hard xxxxxx 命令长啥样。

ps:返回到某一次commit前的代码

git reset --hard xxxxxx //强制返回到某次提交前的源码状态

=慎用 git reset --hard xxxxxx 命令========

接下来的几个小时,开始了心情惨淡又前路漫长的网上寻找解决套路之旅!!!!!!

好在,翻阅了一大波的资料后,finally,finally,终于找到了解决的方案!!!!!!

分 解 走 出 套 路 之 旅=====

part 1:

首先找到了这篇文章,http://www.tuicool.com/articles/mqm2uiF,感谢作者!!

中间有这么一段话,如下:

翻译过来:

如果你没有commit你的本地修改(甚至于你都没有通过git add追踪过这些文件,当他们被删除,git reset --hard对于这些没有被commit过也没有git add过的修改来说就是具有毁灭性的,destructive!!)

but,如果你幸运的是曾经通过git add命令追踪过这些文件,只是没有commit它们而已!那么试试git fsck --lost-found这个命令吧!然后你就可以在本地项目文件中路径为.git/lost-found/other(楼主亲自试验就是这个路径)中找到它们!!并且呢,这里面包含了所有的没有被commit(指定到某次commit)的文件,甚至可能还包括你每次git add的版本(version一词实在不知道在这里怎么翻译,姑且就认为是版本吧)!

使用git fsck --lost-found这个命令,通过.git/lost-found/other这个路径,你可以恢复任何你git add过的文件!再通过find .git/objects -type f | xargs ls -lt | sed 60q这个命令,你就可以找到最近被你add到本地仓库的60个文件,综上所述,希望对你有所帮助!

当然咯,也就是but的but,不幸中的不幸,如果你没有git add过的文件呢,被git reset --hard这个命令整过之后呢,就如你自己执行delete命令一样,再也尸骨难寻啦(也就是真的毛都不剩了!!默哀三秒)!!!!

part 2:

首先呢,楼主真的使用git fsck --lost-found 这个命令,除了在命令行窗口里面见到了一大堆的ID号码(我的小心脏!!因为真的删掉了很多文件,(>_<) ),然并卵,真的要通过一个个ID号码去生成吗?想必内心拒绝的声音也是杠杠的!!可是没有其他办法啊,我真是试过,试了一个之后,果断摒弃啦!!(内心OS:还是回去慢慢写一遍吧!!)

ps:此间在网上还搜到了

git show 2e43cd56ee4fb08664cd843cd32836b54fbf594a

git merge 2e43cd56ee4fb08664cd843cd32836b54fbf594a

这两个命令,均没啥特别反应(就是还是不是自动生成一个文件啊!)!!

(当然咯,楼主还学到了一个新的命令 git reflog,一堆搜出来的资料中说这个对于恢复文件有用,结果只是看到了提交记录列表,真是闹心!!)

part 3:

就在绝望之际,试了find .git/objects -type f | xargs ls -lt | sed 60q(这个里面的60参数可以更改成任意你喜欢的数字,比如250啦,它只是代表你想找回的最近的多少次add过的文件)。其实期间已经多次试过这个命令,windows命令行窗口告诉我 xargs不是什么什么可以执行的操作,然后我就困惑在什么叫做什么什么不是可执行的操作中不能自拔!!!

part 4:

终于写到了一个happy ending的位置,撒花!!好吧,尽管也不是那么happy,但是相比较而言,也算是一个完美的结局!!比起重写,比起一个个的ID添加生成,这个用的时间少的多!!!

第一步:找到.git/lost-found/other这个路径下的文件

第二步:将这些文件拷贝到一个其他的地方(毕竟小心得来的残骸,就要长点心好好保护啦!)

第三步:在sublime或者任意的编程软件中打开,就能看到每个文件的本质是啥啦!!!!!

① 图片或者doc等文件,sublime打开就长这样,自己重新命个名字呗!将00fffbbcab92ec62f7709de8df1fdbb3bbe001b8等改成xxx.png 或者xxx.jpg,如果是图片,当即就可以预览的!如果不是呢,就试试xxx.doc啦!!

②html、css、javascript等等文件,打开一看便知具体是啥,接着就是自己改名字咯!00fffbbcab92ec62f7709de8df1fdbb3bbe001b8

改成xxxx.html或xxx.css或xxx.js啦!!

part 5:

最后总结一句,没事不要随便用 git reset --hard xxxxxx 命令,这个强制恢复到某次提交真是太霸道啦!!恩,还有一句,git fsck --lost-found 真是个无比强大的命令!!!

git fsck --lost-found //找回git add过但是已经不存在文件中的内容(不知道这么翻译对不对,我是这么理解的)
最后的最后,要保持良好的commit习惯!恩,反正commit又不花钱,干嘛不多commit几下呢,至少也要多git add几次!!!!O(∩_∩)O哈哈哈~

(小小的返个场,关于这个解套之旅,楼主还发现了一篇好文。http://www.itwendao.com/article/detail/370021.html,解释了git fsck --lost-found的实现机制)!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chailihua0826/article/details/94619904

智能推荐

WebAssembly,Web的新时代-程序员宅基地

在浏览器之争中,Chrome凭借JavaScript的卓越性能取得了市场主导地位,然而由于JavaScript的无类型特性,导致其运行时消耗大量的性能做为代价,这也是JavaScript的瓶颈之一。WebAssembly旨在解决这一问题。本文从WebAssembly的起源到开发实践对其做全面探究,帮助开发者对WebAssembly有全面的了解。缘起让我们从浏览器大战说起。微软凭借W

Ubuntu系统下nvidia-smi 出现错误 Failed to initialize NVML: Driver/library version mismatch_modprobe: fatal: module nvidia_drm is in use.-程序员宅基地

nvidia-smi报错 NVML: Driver/library version mismatch问题背景解决方案一、checking dmesg二、locate三、updatedb补充、总结问题背景系统:Ubuntu 16.04 LTSNOTE:每个人的问题都可能有差别,网上搜索时可以稍微对上号后再进行操作。还有一般没有进行大面积改动(如我根本就没动怎么就报错了),问题的解决复杂度也应该不会很高。主要是要装pytorch,想先查看一下nvidia-smi,结果出现如下错误:Failed to_modprobe: fatal: module nvidia_drm is in use.

podman案例:打包本地镜像,发送给别人或者上传镜像_podman打包镜像-程序员宅基地

podman案例:打包本地镜像,发送给别人或者上传镜像1.使用场景当别人的Linux系统没有网络,但是又需要镜像来创建容器时,可以将自己下载好的镜像打包发送给别人使用要自建镜像仓库,就需要一些镜像的包,可以将本地的镜像打包好,上传到镜像仓库2.打包流程# 本地现在有好多镜像,我想要打包最新的apache镜像,然后发送给别人使用[root@rhel-liuyunfei-82 ~]# podman imagesREPOSITORY TAG_podman打包镜像

Ubuntu14.04配置gcc4.4.4+Qt4.8.4交叉编译环境-程序员宅基地

Ubuntu14.04配置gcc4.4.4+Qt4.8.4交叉编译环境, Ubuntu16.04也类似,安装32位程序运行支持sudo apt-get install lib32stdc++6 lib32z1 lib32ncurses5 lib32bz2-1.0可能报错:lib32stdc++6 : 依赖: lib32gcc1 (>= 1:4.1.1) 但是它将不会被安装 E: 无..._qt4.8.4交叉编译器

【iOS开发】---- 开发错误汇总及解决方法-程序员宅基地

一、今天调试程序的时候,出现了一个崩溃,信息如下:2013-02-01 09:05:23.929 SD4iPhone[627:c07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of s

CentOS安装配置Maven_centos安装maven-程序员宅基地

CentOS安装配置maven的一些常见步骤_centos安装maven

随便推点

vi 常用命令 zz_vi zz-程序员宅基地

输入模式命令 进入输入输出的方法 命令 作用 在光标后输入文本 _vi zz

求两个字符串的最长公共子串_鬼鸮的博客-程序员宅基地

两个字符串分别为"abccade"和"dgcadde"输出结果为cad滑动比对解法输入字符串1和2字符串1固定,字符串2滑动两层for循环,外层控制字符串2的滑动,内层控制滑动后重叠部分字符串的比对思路就是这样,具体的实现可以直接看代码package mainimport ( "bytes" "fmt")func getMaxSubStr2(str1, str2 string) string { len1 := len(str1) len2 := len(str2) var_求两个字符串的最长公共子串

云服务器+云数据库+WordPress搭建网站|教程_bookmonster.club-程序员宅基地

本文已在个人网站上发表,地址:http://www.bookmonster.club一、硬件环境1.本地主机,window10系统2.腾讯云服务器:Windows Server 2016 数据中心版 64位中文版3.腾讯云数据库:CynosDB集群–MYSQL 5.7二、选择搭建方式 [镜像部署Wordpress](https://cloud.tencent.com/docume..._bookmonster.club

cmder 报错 此时不应有 ..., ls 不是内部或外部命令_cmder无法使用ls-程序员宅基地

检查环境变量,所有的环境变量最后一个路径不要分号,如下:将**分号** 和**反斜杠**删除,最后重启cmder,就可以恢复正常。来源于:cmder 此时不应有.......以及cmder安装的一些问题;_cmder无法使用ls

rpm包和deb包_deb mac rpm src win-程序员宅基地

https://blog.csdn.net/liuxiaodong400/article/details/81038419_deb mac rpm src win

剑指Offer 24 | LeetCode 206 反转链表(Python)_letcode 剑指 24 python-程序员宅基地

题目描述输入一个链表,反转链表后,输出新链表的表头。题目解法递归参考我之前在知乎发的图解文章:https://zhuanlan.zhihu.com/p/60117407主要思路是递归到最后的节点,然后进行操作。class Solution: # 返回ListNode def ReverseList(self, pHead): # write code ..._letcode 剑指 24 python