恢复 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
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
简而言之,就是你 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 慎用!!!
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 --hardis a destructive operation for uncommitted changes. If you did happen to stage them, but didn't commit them, try
git 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 you
git added, with
git 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't
git 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 -p e0bcd23aa3013843e230c9e25c26ab367f3acade
$ git cat-file -p e8a5eee4136d1b08badb7dc26f459d05e86aff84
.........此处省略N多条
git reset --hard 慎用!!!
相关文章推荐
- 如何恢复 git reset --hard 删除的文件
- git reset--hard后恢复暂存区文件
- Git恢复reset --hard丢失的文件
- 恢复 git reset -hard 的误操作,git reflog
- extundelete恢复Ubuntu系统下git clean -fd(rm)误删除的文件
- git相关-- git命令 及 git add后 未commit git reset --hard如何恢复
- git 文件的恢复和删除
- git 恢复工作区删除的所有文件
- git恢复误删除文件
- 从Git仓库中恢复已删除的分支、文件或丢失的commit
- git 删除和恢复本地删除的文件
- 使用git reset --hard 命令后,怎么再恢复你的数据
- 恢复 git reset -hard 的误操作
- git clone 后误删除了分离出来的文件怎么恢复?
- git reset到之前的某一个commit或者恢复之前删除的某一个分支
- git恢复误删除的文件
- GIT入门笔记(12)- 删除文件、提交删除和恢复删除
- git 恢复删除的所有文件 (含中文)
- 从Git仓库中恢复已删除的分支、文件或丢失的commit[转]
- git 恢复删除的文件