git 版本回退 -- git log 和 git reflog 的区别

背景

今天代码写着写着,就发现在IE8有问题,但是在改代码之前是没问题的。这个时候我就决定先commit我的代码,然后reset到我刚才pull的远程最新版本上去。

回退完之后,也看出是什么问题了,我就想回到我刚才commit的那个时候去,执行了git log命令,这个时候我傻眼了,麻痹的我的commit记录没了。当时无所个草泥马在眼前,当时就呆在那坐了回,骂了半天,什么鬼。

解决方案

然后我就去google了一下(总不能让我重新写我写了一上午的东西吧),我觉得我commit过了,肯定不会有问题的,代码一定还在。果不出其然,我发现了还有一个命令git reflog,执行了之后,找到了我刚才commitid,直接git reset --hard xxx,找回了我之前的代码。

原理

  • git log
    • git log展示的是当前的HEAD以及它之前的各种信息。等于它只能找到之前的各种commitmerge等信息。
    • 所以在我reset之后,找不到我commit的记录,因为这次的commit是在此时HEAD之后进行的。
  • git reflog
    • git reflog记录了你的目录下任意时刻的commits。所以就算我reset了,依旧会有我的记录。

总结

所以说,只要你commit过,始终reflog绝壁是能找到你的commit记录的

“Keep calm and use git reflog

参考文档