前言
以前只知道有git log命令,并不知道有git reflog。今天一个偶然的机会,我不小心把自己前两天写的代码给整丢了,如果时几个小时的代码,我重新写一遍就算了,但是这次不一样,这次是非常重大的修改,如果要重写,至少要1-2天,时间上也不允许我这么做,好在最后是git reflog拯救了我。
我先简单描述下我的代码为什么丢失:先说明我的提交和推送等操作都没有错误,但是前两天不知什么原因,我的代码被切换到了HEAD detached状态下,detached HEAD 指的是HEAD指针没有指向任何的branch,而是指向了一个commit。我一直提交代码持续到今天,一直都没有发现。直到今天才把一个重大功能搞定了,正当我准备把代码都推送下,然后松一口气,喝杯咖啡休息会儿时,发现代码怎么不在master分支,于是我就没多想双击了一下master分支,于是代码顺利被切换到了master分支,但是之前提交的代码和记录都没了,虽然IDE还可以撤回近期修改的几行代码,但是这几天修改的代码,预制体,场景,全部丢失,我瞬间慌了,好在最后找到了一个和我有相同遭遇的博主,拯救了我。
git reflog
reflog:全称:reference logs,是在本地仓库,记录了 当“分支或其他引用”有更新时的 所有 提交记录
我们通过对比git log来详细解释下 git reflog到底是什么意思
git log 是显示沿着当前分支指针,递归查找父节点的父节点…的日志
git reflog 不是针对当前分支的。他和分支无关,是Head所指向的一个顺序的提交列表,甚至它不是repo的一部分,它单独存储而且不包含在pushes,fetches或者clones里面,它纯属是本地的。
所以,reflog可以很好的帮助我们恢复我们的所有的误操作。
修复过程
先展示我的误操作记录,从下往上看,大家可以发现本来我在master分支正常提交,但是不知道为啥,突然提交跑到Head上面了,这就是属于detached HEAD状态了。
下面我们展示如何修复
1.git reflog
执行git reflog,找到Head detached的id为 d4eb12002072df5f40e194d3b8cf3603f02b4c63,
2.git checkout d4eb1200
检出detached的记录
此时我们就会发现代码已经找回了,接下来我们就赶快把detached的代码合并到master就可以了。
结束
好在有惊无险,又学到一招,不得不感叹:学无止境呀,git真的是一个博大精深好的工具。
希望这篇文章可以对你有所帮助。