python

git reset —hard后暂存区代码跑哪儿去了?

文章暂存

systemime
2020-07-18
4 min

摘要.

#

转自:https://www.licoy.cn/3508.html


# 前言

昨天博主在临近下班之时,准备提交代码到远程Git,当我Pull远程代码的时候提示我有冲突,主要是resource目录下的文件被删除的更新,奈何IDEA又不给我个合并的界面,只告诉我这几个文件需要合并~于是我脑袋一热就回滚到有需要合并的那个commit版本,然后就fuck,我暂存区的代码全部“game over!”不见了。

# 解决方案

发现代码不见了顿时就像第一次见了喜欢的姑娘,心里那是一波又一波的小鹿乱撞,不过这是悲伤的。
于是乎就在网上急切的寻找办法,终于在我一顿操作猛如虎的搜索下,最终将代码恢复了。
在仓库的目录下打开终端,输入:

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


其中末尾的60q代表最近60次的add操作,然后会出来很多类似于这样的记录:

-r--r--r--  1 licoy  staff      249 Jun 17 17:59 .git/objects/c0/dd72f08b16a4f9c1d87b836b7ecee75a332252
-r--r--r--  1 licoy  staff       45 Jun 17 17:59 .git/objects/58/c50797f9fe9dceda109019a2b8d9cf18a48df4
-r--r--r--  1 licoy  staff       46 Jun 17 17:59 .git/objects/9c/9c6c686a21fc394d8dfc550f41824205b1dffa
-r--r--r--  1 licoy  staff      750 Jun 17 17:59 .git/objects/d7/73c7e375a316fe3e00800ffd5c5be49b00fba3
-r--r--r--  1 licoy  staff     1217 Jun 17 17:59 .git/objects/6b/a44cf7a71f83f06d969af0a2464451edc133bb
-r--r--r--  1 licoy  staff    29067 Jun 17 17:57 .git/objects/1a/56f322c6cbe07642ca248cc8de3a63d5acd0d7
-r--r--r--  1 licoy  staff      200 Jun 17 17:55 .git/objects/30/3d28198f9375111092438ddb7d872aca84f863
-r--r--r--  1 licoy  staff       79 Jun 17 17:55 .git/objects/ab/0c251513237d54b9c439e73a2f26486432ed3d
-r--r--r--  1 licoy  staff      234 Jun 17 17:55 .git/objects/e4/57508e691703f4ff58a69f3410cd28f3780d63
-r--r--r--  1 licoy  staff       45 Jun 17 17:55 .git/objects/67/948e2e1cb35a82799585b64859d8473b01dbe7
-r--r--r--  1 licoy  staff       47 Jun 17 17:55 .git/objects/f5/4b5612be0810f4658c15a9a2297ac34198c7e0
-r--r--r--  1 licoy  staff      250 Jun 17 17:39 .git/objects/1a/908f631cfe95ab0979877f929280992bacc009


然后我们选择差不多最近的时间记录,然后找到他的文件路径在终端输入

git cat-file -p {commit_id} > c.txt

其中{commit_id}.git/objects/ab/0c251513237d54b9c439e73a2f26486432ed3d部分中的ab/0c251513237d54b9c439e73a2f26486432ed3d,要去掉中间的斜杠,然后就是一次commit_id


执行上述命令之后会将commit_id主要内容输出到c.txt,然后我们需要人工辨别记录内容是不是我们暂存区的内容,如果是,那我们只需要在回滚到这个commit_id版本即可。

# 尾记

这次的操作之后让我对每次的回滚更加小心翼翼了,说白了还是对Git不是那么透彻,git reset --hard要慎用,用不好就像用了rm -rf xxx一样,后悔莫及哟~

上次编辑于: 2021/5/20 下午3:26:49