缘于某次手贱,利用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