git reset –hard 后本地代码找回
-
作为 git 初学者,可能很容易碰到如下一些大坑,不同情况和采坑解决过程如下:
1. 踩坑过程
-
程序调试通过,开开心心commit,中间提示有代码检查错误,三个选项commit、concel、view(intellij idea编译器),点了view(划重点:因为选择的查看view,因此并没有commit成功。坑就是这时候挖的)。
-
view之后发现没啥大事,准备push。push的时候发现有一些不是我commit的东西(其实你压根没commit成功,当然不是你的变更啊啊啊!),误以为提交错了,打算撤回commit操作(路线完全跑偏)
-
执行 git reset --hard commid_id (就是这个坏灭性操作)
- 这个命令是强制回退到某一次历史commit的版本,并清除本地修改!
- 再次很瞎的 在 git log 中捞了一次历史commit的版本号(其实仔细看时间会发现根本不是自己以为的那次commitid的),进行了回退。然后就发现本地代码全没了。。。
2. 不同情况下解决办法
2.1 没有commit,没有add
- 对不起,找不回了,放弃吧。
2.2 没有commit,但是有add操作
-
执行
git fsck --lost-found
-
在项目git目录下
.git/lost-found/other
有你add过的文件,挨个看看,能救回来多少是多少吧。 -
再执行
find .git/objects -type f | xargs ls -lt | sed 60q
找回本地仓库里边最近add的60个文件。找回思路同上。
2.3 执行过commit
-
好吧,你很幸运。
-
执行
git reflog
-
会有类似下面的东西,挑你想回退的地方,一般是那次commit之前的head,例如 HEAD@{7}
-
执行
git reset --hard HEAD@{7}
心得:执行网上查的命令要当心啊,执行不懂的命令要当心啊啊啊啊
3. 其他
- 感谢 • 免费 • 用爱发电 • GitHub releases, archive , gist, raw.githubusercontent.com 文件代理加速下载服务.:https://ghproxy.com/