缘于某次手贱,利用git工具的时候,没注意,直接用reset hard的方式将之前提交的内容给reset掉了,这直接导致了这一部分提交的内容直接丢失。
那么怎么才能恢复这些commit呢。也找了一些教程,大致可以使用以下几种途径去处理。
git reflog
git reflog 命令读取本地的最近的操作记录,我们可以找到reset前的最后一次提交的commit。
可以看到,reset操作之前提交了两次,我们选取最近的一次commit:fbcf5ad
|
|
执行上面命令后,发现又回到了最后一次提交的commit上了,也算是完美的恢复了。
对于已经commit的分支,都推荐使用这种方式恢复
git fsck –lost-found
使用该命令也可以查找到对应的悬空的commit(dangling commit),同样可以使用git reset或者git cherry-pick等命令恢复。
对于已提交的,使用该方式去恢复显然没有使用git reflog更直观
但对于未提交但已add的内容,git fsck --lost-found 也是有可能帮助恢复的。
我们通过git fsck --lost-found查看到的内容不仅能查看到悬空的commit,还能查看到悬空的blob(dangling blob),
而这些blob的内容实际就是我们未提交的内容,我们可以通过
|
|
的方式去读取到该blob对应的内容。 使用
|
|
的方式去将内容保存至丢失的文件中。
这样我们就可以将这些文件一个个恢复,当然过程是繁琐的。
总结
- 尽量少使用
git reset --hard命令,一不小心可能让你头脑崩溃 - 如果使用了该命令,却又想找回,
commit过的直接使用git reflog命令找回,所以阶段性的commit是种好习惯 - 如果未
commit过的,只能使用git fsck --lost-found尝试恢复,少量的文件还是容易恢复的,但大量的文件恢复也会让你疯狂。 - 未
add过的文件很难恢复,所以如果有大量文件修改,最好还是阶段性的add或者commit