您的位置:首页 > 其它

恢复 git reset --hard *删除的文件

2017-12-15 19:23 1611 查看
        git reset --hard     慎用!!!

git reset --hard     慎用!!!

git reset --hard     慎用!!!

今天,不小心使用了下面的Git命令,结果导致了文件被删除了,花了很大力气才恢复出来。

起因:准备提交代码,发现有冲突提交了,于是想revert这个提交。

随便从网上搜了篇文章,然后执行 git reset --hard xxx 

结果 ... 发现工作区最近这几天的改动,新创建的文件都没有了。

$ git status

# On branch master

# Changes not staged for commit:

解决办法:

当时,看到“working directory clean”,感觉就不对劲,完了。看了一下文件,发现最近的改动全没有了,果然是干干净净啊!

所以,使用这个命令 git reset --hard 一定要小心!

第一步,从网上搜索到可以恢复到最近提交的代码

$ git reflog

28a9c7a (HEAD -> master) HEAD@{0}: reset: moving to 28a9c7ad847c94ae478cc160d33d7f51a52354f2

e0bcd23 HEAD@{1}: commit: 修改说明

28a9c7a (HEAD -> master) HEAD@{2}: commit: 删除文件

$ git reset
e0bcd23

$ git status

# On branch master

# Your branch is ahead of 'origin/mast
c62d
er' by 1 commit.

好吧,现在恢复出了上次已经提交的,有了一点进展,赶快备份到另外一个地方。

可是,我还有不少还没有提交的文件被删除了呢!

继续找办法,终于在 stackoverflow 找到了

If
you didn't already commit your local changes (or at least stage them via 
git
add
, they're gone. 
git
reset --hard
 is a destructive operation for uncommitted changes. If you did happen to stage them, but didn't commit them, try 
git
fsck --lost-found
 and then search through the contents of 
.git/lost-found
 -
it will contain all of the objects that aren't referenced by a known commit, and may include versions of files that were staged.

You can recover anything you 
git
add
ed, with 
git
fsck --lost-found
 and poke around in
.git/lost-found
find
.git/objects -type f | xargs ls -lt | sed 60q
 will give you the last 60 things to get added to the repo, that'll help. Anything you didn't 
git
add
 is gone as surely as if you'd deleted it yourself.
简而言之,就是你 staged 了,但是还没有提交的东西,还是可以恢复的。具体的恢复过程

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

 -r--r--r-- 1 admin 197121     169 十二 14 10:48 .git/objects/e0/bcd23aa3013843e230c9e25c26ab367f3acade

-r--r--r-- 1 admin 197121     520 十二 14 10:48 .git/objects/e8/a5eee4136d1b08badb7dc26f459d05e86aff84

-r--r--r-- 1 admin 197121     644 十二 14 10:48 .git/objects/a4/ded7888c8e131e4d109e4246a0703950af4bd1

-r--r--r-- 1 admin 197121     836 十二 13 20:42 .git/objects/34/0e209b5d3a148f1af4df18c96e9a8c852d5ddb

-r--r--r-- 1 admin 197121      52 十二 13 20:42 .git/objects/96/f4f47246024d5305dc66770aaa60eb323feef5

-r--r--r-- 1 admin 197121     532 十二 13 20:42 .git/objects/b4/4146fa8929d7b53b27ee9ebbc9b2a81adf4952
.........此处省略N多条

$ git cat-file -p e0bcd23aa3013843e230c9e25c26ab367f3acade

$ git cat-file -p e8a5eee4136d1b08badb7dc26f459d05e86aff84

.........此处省略N多条

git reset --hard     慎用!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: