今天在一个分支上进行开发,费尽千辛万苦终于把功能实现了!!想着放下键盘去喝口水,但是等我水喝完回来,看到产品经理在操作我的电脑,这老哥居然一顿失误操作给我把刚刚开发完功能的分支删了!!我靠,我还没合并分支呢,给我把分支删了????极其不讲武德,好在我把 GIT 玩得六,把分支给恢复回来了,不然这不是又要加班的节奏吗!!接下来就讨论一下怎么恢复没合并且被删除的分支。
假设我当前 GIT 仓库的状态如下:
只有一个 master 分支,接下来我们创建并切换 dev 分支,并且在这个分支上进行开发然后提交:
这时候我们 GIT 仓库的状态如下:
OK 接下来我要模拟产品老哥的操作了,大家都让让!!!!
我靠,这老哥是真牛,第一下用 -d
选项被阻止了,他还给我强行删掉了,什么仇什么怨啊!还好我技术功底扎实,给老哥秀了一顿操作,把分支给救回来了。
1、首先,用命令 git reflog
来查看之前操作的历史记录:
注意,这时候如果我们直接用 git log
是看不到任何关于 dev 分支的信息的,但是通过 git reflog
可以看到我们在 dev 分支上提交时候的 commit 对象的 hash 值。
2、然后,用命令 git checkout 5fdaaf7
将 HEAD 指针指向对应的提交记录:
这是一种称为 detached HEAD 的操作,因为一般来说 HEAD 会指向某个分支,但是这种操作使得 HEAD 直接指向了某次 commit 。通过 git log
,我们也可以看到当前跟 dev 相关的提交记录又出现了。
3、最后,在当前 HEAD 所在位置创建并切换分支 dev,则恢复了我们之前 dev 分支的状态:
大功告成!!!分支回来了,以前提交的记录都还在!!非常 nice,不同加班了!!
通过上述的操作我们可以知道,即使我们用命令
git branch -D
删除一个分支,也仅仅是删除了一个分支指针而已,在分支下的提交记录其实是不会被删除的,仍然是可恢复的!!!