VSCODE GIT 放弃更改后文件被删除了,无法恢复

2021-06-16 13:51:11 +08:00
 547674115

我有一个程序在 VSCODE 打开后,放弃了所有更改,工作了几天的东西没了,这几天做的也没有上传到 github 。 我尝试了 git log 只有我许久之前的提交记录, 许多网上的方法已经试过了都不行,我尝试用恢复软件去恢复,但是也扫描不出来, 我觉着 git 的删除不是平时我们那种的删除,但是我能力有限只能尝试到这一步了, 抱着最后一丝希望来 V 站问问各位彦祖,有没有什么解决的办法。

3431 次点击
所在节点    git
19 条回复
codehz
2021-06-16 13:53:42 +08:00
你点放弃更改就是删除没提交本地文件了(就字面意义的恢复到修改之前的状态)。。。以后多注意下吧。。。
liyang5945
2021-06-16 13:58:38 +08:00
换 jetbrain 家的 ide 吧,有本地历史功能
BrettD
2021-06-16 14:01:05 +08:00
你放弃更改的意思就是删除你自己在本地没有提交的更改,你也没有 stash,找不回来了
no1xsyzy
2021-06-16 14:09:31 +08:00
如果 add ( stage )过有概率还能 git reflog 找出来,没了就真没了
防呆不防傻
villivateur
2021-06-16 14:13:25 +08:00
这次就当长个教训吧,以后还用 git 的话,建议学习下基本的理论
phony2r
2021-06-16 14:16:27 +08:00
我一直要求团队里的人用 git cli, 不要用 gui 这种花里胡哨的东西
rannnn
2021-06-16 14:17:30 +08:00
galikeoy
2021-06-16 14:21:42 +08:00
@phony2r #6 这也能怪到 GUI 头上去
Snail5956
2021-06-16 14:33:50 +08:00
如果是 Mac,time machine 里找找
liuidetmks
2021-06-16 14:35:21 +08:00
如果编辑页面没关闭,control z 试试呢,说不能能回来
a1gslyghmqnl
2021-06-16 15:41:52 +08:00
你算幸运的了,有个哥们丢了两个月的成果: https://github.com/microsoft/vscode/issues/32405

我觉得 #6 说得有道理,别用 GUI,git 对于一些危险操作的判断逻辑比 vscode 的 GUI 严格多了,谁能保证不出错呢?

而且拥有拉个临时分支及时 commit 的习惯也是好的,只要提交进仓库就一定能找回来,后续 push 之前自己 rebase 整理一下提交即可。要不就装个 local history 插件。
keepeye
2021-06-16 16:33:18 +08:00
吸收教训,下次不要两天都不提交了。
msg7086
2021-06-16 16:34:03 +08:00
@a1gslyghmqnl 严格多了(指 hard reset 连确认都没有

遇上不好用的 GUI,第一反应竟然是用 CLI 而不是找一个好的 GUI ?
Ranying
2021-06-16 16:36:16 +08:00
没进暂存区,相当于从最新版本库覆盖当前文件。
justrand
2021-06-16 17:08:12 +08:00
@msg7086
说实话,我第一反应也是用 CLI,官方也推荐使用 CLI 。
a1gslyghmqnl
2021-06-16 17:13:03 +08:00
@msg7086 跟 reset 没关系,我刚开始说的是 git checkout 到别的分支,这个错误会直接抛给 vscode GUI,所以并不比 GUI 更严格,这个是我说错了。但是,我说的是危险操作别用 GUI,第一,至少你一个一个敲进去的时候还能在自己脑子里过一遍;第二,这不是好不好用的问题,GUI 就没有这种操作模式。GUI 拿来做看看 diff 和 graph 之类的无关紧要的操作不就得了。
msg7086
2021-06-17 02:56:42 +08:00
@justrand @a1gslyghmqnl
如果 GUI 做不到 CLI 能做的工作,那说明这个 GUI 还有待改进。
我几年前就和别人辩论过一次。我的观点是,人类的大多数操作还是要依赖直观的图形界面。就比如人们常用的文本编辑工具 vim 就是图形界面,CUI/GUI 。对于简单的或者批量的操作,sed awk 之类的 CLI 工具更方便,但是任何复杂的交互还是 vim emacs 甚至是 nano 这样的图形界面工具做得更好。

另外我用的 GUI 在切换分支时如果要重置文件的话是会自动提示 stash 的,CLI 反倒是严格要求用户必须记得手动执行 stash 。所以我以前教人用 git 的时候,都是给 GUI,然后让他们看看在做一些复杂操作的时候,GUI 是怎么调用 CLI 的,然后再学习对应的 CLI 以备不时之需。在我这里,CLI 基本上才是做一些无关紧要的操作(比如 pretty print git log 之类的)。
AndyAO
2021-06-21 13:34:06 +08:00
@no1xsyzy #4 reflog 是记录 HEAD 的 ref 变更的,所以就算曾经在 stage 中存在过,应该也是找不回来的
no1xsyzy
2021-06-21 23:29:23 +08:00
@AndyAO 啊,应该是 `git fsck --lost-found`
(记不住不常用指令,并且我目前还足够小心故而没用到过这个)

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

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

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

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

© 2021 V2EX