git add .之后,再 reset --hard 到上一个 commit,所有文件都没了,还有救么

2016-10-07 01:28:47 +08:00
 ps

本来想把一个本地的项目弄到远程仓库上,第一个 commit 提交了一个 README ,然后 push 了 然后想着把项目剩余的其他文件提交上去,git add .之后,脑子抽了,又reset -hard到上一个 commit ,结果文件就这样没了,没了。。。这特么还能还原回来么,求助 /(ㄒoㄒ)/~~

4587 次点击
所在节点    git
14 条回复
df4VW
2016-10-07 01:32:16 +08:00
git fsck --lost-found
johnnie502
2016-10-07 01:39:28 +08:00
git reflog 找到 commit 的那个 sha ,然后 git reset --hard [sha] 过去即可
ps
2016-10-07 01:42:26 +08:00
@df4VW 出来了一大堆,是要逐个恢复么
msg7086
2016-10-07 01:42:57 +08:00
如果你文件没提交成功,那么 reset hard 是不会删除你文件的。
如果 reset hard 以后你文件不见了,说明他已经在你提交记录里了,找下 reflog 即可。
ps
2016-10-07 01:44:06 +08:00
@johnnie502 git reflog 只有第一次 commit 的记录,仓库里面只有 README 一个文件
ps
2016-10-07 01:47:14 +08:00
@msg7086 我也很奇怪,但是 reflog 里面是只有一个提交记录
ps
2016-10-07 01:50:07 +08:00
@msg7086 我在 git add . 之后没有提交,直接就 reset 了
johnnie502
2016-10-07 01:54:14 +08:00
只 add 但没 commit 的话,就只能从 fsck 里面找了
ps
2016-10-07 01:58:50 +08:00
@johnnie502 有没有一个批量恢复的方法, fsck 里面有很多,应该都是要恢复的
skydiver
2016-10-07 02:01:19 +08:00
如果你不 git gc 的话,那个提交还在。翻翻命令行记录找到那个 commit 的 hash 然后 checkout 就行了。

或者 reflog 找找那次提交的 hash 。
sutra
2016-10-07 02:02:49 +08:00
git fsck --lost-found
ls -l .git/lost-found/other/
jyz19880823
2016-10-07 10:17:49 +08:00
我办过这事,还好 Emacs 还有,直接把所有文件重新保存一次
lechain
2016-10-07 10:52:43 +08:00
git reflog ,应该可以看到记录,只要你没有进行 git gc 。
有记录了就可以 checkout 回来
lijinma
2016-10-09 09:57:52 +08:00
刚看到这个帖子就测试了一下,哈哈哈哈

git fsck --lost-found 可以找到,不过会找回来很多。找回来后自己 grep 一下哪个是你的目标文件吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/310910

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX