背景
今天代码写着写着,就发现在IE8有问题,但是在改代码之前是没问题的。这个时候我就决定先commit我的代码,然后reset到我刚才pull的远程最新版本上去。
回退完之后,也看出是什么问题了,我就想回到我刚才commit的那个时候去,执行了git log命令,这个时候我傻眼了,麻痹的我的commit记录没了。当时无所个草泥马在眼前,当时就呆在那坐了回,骂了半天,什么鬼。
解决方案
然后我就去google了一下(总不能让我重新写我写了一上午的东西吧),我觉得我commit过了,肯定不会有问题的,代码一定还在。果不出其然,我发现了还有一个命令git reflog,执行了之后,找到了我刚才commit的id,直接git reset --hard xxx,找回了我之前的代码。
原理
- git log
git log展示的是当前的HEAD以及它之前的各种信息。等于它只能找到之前的各种commit、merge等信息。- 所以在我
reset之后,找不到我commit的记录,因为这次的commit是在此时HEAD之后进行的。
- git reflog
git reflog记录了你的目录下任意时刻的commits。所以就算我reset了,依旧会有我的记录。
总结
所以说,只要你commit过,始终reflog绝壁是能找到你的commit记录的
“Keep calm and use git reflog“