git在执行add命令后, 会将文件改动存入暂存区, 如果没有commit就直接回退版本, 会导致暂存区的数据丢失.
但是可以通过以下办法找回:
1.找出最近放到缓存区的的文件
find .git/objects -type f | xargs ls -lt | sed 10q
这个命令会列出最近修改的10个文件,结果如下
-r--r--r-- 1 wangdi staff 202 11 25 14:19 .git/objects/7b/b3b74de4432b36d4c8be1109cb887b3858e37a
-r--r--r-- 1 wangdi staff 282 11 25 14:19 .git/objects/f2/d4073df05e0275c931ca94f046847984bd42c6
-r--r--r-- 1 wangdi staff 345 11 25 14:19 .git/objects/49/88d62d11b4d46ba0e486fb11ffea1d5c8f91c6
-r--r--r-- 1 wangdi staff 174 11 25 14:19 .git/objects/af/27d3d78a294139e295e7dd1033ddabce52a8ae
-r--r--r-- 1 wangdi staff 80 11 25 14:19 .git/objects/d6/834e800bfbc02f7d3bb13e3267c40deadc4e84
-r--r--r-- 1 wangdi staff 132 11 25 14:19 .git/objects/39/172cb7f6d7bc3087e857cbc08c44f339e03abe
-r--r--r-- 1 wangdi staff 74 11 25 14:19 .git/objects/82/3fa3dc5341a7f1edfd8c7819576a2cbc210248
-r--r--r-- 1 wangdi staff 167 11 25 14:19 .git/objects/66/f1cc31dc3e842adab417eb39a1eaaf02a0645d
-r--r--r-- 1 wangdi staff 163 11 25 14:19 .git/objects/42/cc312740bfda42c88292eb6b2ff433db854edb
2.输出文件内容
因为这些文件都是通过特殊处理的,无法直接看到文件内容,需要通过如下命令输出一下
git cat-file -p ID > fileName
其中ID为Objects后面的文件编号(去掉/),ResultFile是输出结果的文件,具体使用演示如下
git cat-file -p 7bb3b74de4432b36d4c8be1109cb887b3858e37a >~/aaaa/b3b74de4432b36d4c8be1109cb887b3858e37a
我是在自己的根目录下建立了一个aaaa的文件夹,然后通过终端,在该目录下搜索某个文件中的关键字符(如:STUrl_userAgreement)可以找到对应的文件
grep -Fnr STUrl_userAgreement .
结果如下:
./dc7a4d3a91cee7f9567f082a1aea0bc65075b5:11:let STUrl_userAgreement = "https://app.strongwinds.cn/about/user-agreement.html"
./e66441250d8fac370726ea4a18b6cb3e933e5e:275: webController.url = STUrl_userAgreement
这样就可以找到对应内容的文件了!