关于 git 的一个撤销恢复,恢复不了的问题

2017-10-08 01:35:42 +08:00
 tongz

写完代码
在 git 上边进行了 add 操作
没有 commit
然后 pull 了一下
接着撤销 使用的是 git reset --hard 进行撤销
现在求恢复,我已经 reflog 查看了操作日志 然后回退了一下,发现回不去了........
请问大神还有没有办法救回来..

需要您的回答,感谢您的回答!!!!

3230 次点击
所在节点    git
10 条回复
tongz
2017-10-08 01:51:15 +08:00
补一句,
git status 之后

现在
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
说我没有任何需要去提交的修改.....
Lpl
2017-10-08 01:56:21 +08:00
除非你的 IDE 有 history,不然没有办法恢复了
tongz
2017-10-08 02:04:41 +08:00
@Lpl 感谢...只能从头再来了....
SoloCompany
2017-10-08 03:44:04 +08:00
如果你还没有执行过 gc

并且还能记得文件的某部分内容的话,也许还能有救(因为已经 add 过,所以文件已经进入过 index 也就是说存在于 git database 的)

参考 https://stackoverflow.com/questions/7088855/git-get-all-blobs-with-pattern/37199329#37199329

参考命令
```
git grep ’ text' $(git fsck --unreachable | grep '^unreachable blob' | cut -d' ' -f3)
```

如果 gc 过就肯定没救了
msg7086
2017-10-08 03:56:10 +08:00
@SoloCompany 没记错的话 gc 只会清除多少天以上的辣鸡吧。
FrankHB
2017-10-08 06:27:49 +08:00
@msg7086 可以--aggressive --prune=now。
shingle
2017-10-08 10:33:01 +08:00
ctrl+z
acr0ss
2017-10-08 10:44:33 +08:00
gam2046
2017-10-08 10:47:58 +08:00
尝试恢复到最近的一条 commit 行不行
git log 查看一下你要恢复的那条 commit 的 id
git rebase -i 你要恢复的 commit id 的下一条 id

在文本编辑器里,把需要抛弃的操作标记为 drop

但是看你描述,并没有 commit,那么是不是可以直接 checkout 最近的一条 commit,add 后没有 commit 的文件应该是不会收到影响?(大雾)
lilydjwg
2017-10-08 12:01:07 +08:00
很麻烦,因为没有目录信息。add 过的文件被 gc 之前自然是还在的,然而要识别是哪个不容易。可以 find .git/objects -type -f -mtime -30 这样子按 mtime 搜索一下,然后和 dangling objects 取交集,再排查。

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

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

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

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

© 2021 V2EX