您现在的位置:首页 >> 前端 >> 内容

如何恢复gitreset--hard*删除的文件?

时间:2017/12/16 11:28:56 点击:

  核心提示:git reset --hard 慎用!!!git reset --hard 慎用!!!git reset --hard 慎用!!!今天,不小心使用了下面的Git命令,结果导致了文件被删除了,花了很大...

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/master' by 1 commit.

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

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

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

If you didn't already commit your local changes (or at least stage them viagit add, they're gone.git reset --hardis a destructive operation for uncommitted changes.If you did happen to stage them, but didn't commit them, trygit fsck --lost-foundand 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 yougit added, withgit fsck --lost-foundand poke around in.git/lost-found.find .git/objects -type f | xargs ls -lt | sed 60qwill give you the last 60 things to get added to the repo, that'll help.Anything you didn'tgit addis 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 -pe0bcd23aa3013843e230c9e25c26ab367f3acade

$ git cat-file -pe8a5eee4136d1b08badb7dc26f459d05e86aff84

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

git reset --hard 慎用!!!

作者:网络 来源:江木