Git日常装逼手册(二)· git reflog 救命稻草

在日常的开发中 可能会遇到一些功能并行开发,这样在你的本地代码仓库就会出现多个分支。这样时间久了,很容易忘记当初分支上都做了什么,而且还可能因为记忆错误而把分支误删,恰好你当时也没有把本地的分支推送到远程。
本文就来记录一下我曾经是如何将误删的分支恢复的。

git reflog

这个日志记录了你使用git命令的每一步操作,这样如果出现了失误如错误的删除了分支,找回分支时用途很大。

reflog命令:

显示整个本地仓库的commit,包括所有branch的commit,甚至包括已经撤销的commit。

只要HEAD发生了变化, 就会在reflog里面看得到。

3ad1a3e (HEAD -> test, origin/test) HEAD@{0}: merge manage_help: Merge made by the 'recursive' strategy.
3b0fead HEAD@{1}: checkout: moving from manage_help to test
16dfa0a (manage_help) HEAD@{2}: commit: 学习资料
295653b HEAD@{3}: checkout: moving from test to manage_help
3b0fead HEAD@{4}: merge manage_help: Merge made by the 'recursive' strategy.
b0f3ea0 HEAD@{5}: checkout: moving from manage_help to test
295653b HEAD@{6}: commit: 评论管理
77bcf32 HEAD@{7}: checkout: moving from test to manage_help
b0f3ea0 HEAD@{8}: merge cache: Merge made by the 'recursive' strategy.
cfc8f3f HEAD@{9}: checkout: moving from manage_help to test
77bcf32 HEAD@{10}: checkout: moving from cache to manage_help
88caf25 (cache) HEAD@{11}: commit: 订单合同查看
410de16 HEAD@{12}: checkout: moving from master to cache
d638e55 (origin/master, origin/HEAD, master) HEAD@{13}: checkout: moving from cache to master

记忆中,我本地是有一个叫 cache 的分支,可是后来因为手贱就把它
git branch -D cache 删掉了,现在追悔莫及。幸亏使用 git reflog 查看到 对cache分支的最后一次操作是
410de16 HEAD@{12}: checkout: moving from master to cache

于是我把恢复点定在了 410de16

git checkout 410de16

// 然后从这里检出一个新的分支
git chekcout -b new_cache

这是发现当前所处的 new_cache 分支上已经出现了当时做的功能代码。

到此目的已经达到,如果你像我一样好奇这个记录里边的HEAD@{}是个什么东西,可以继续往下看

HEAD@{} (What is HEAD in Git?)

也许你曾看到过下面的错误:

  • The branch must be fully merged in HEAD.

stackoverflow给出了解释

你可以把HEAD理解为你当前所处的分支,每次当你使用 git checkout 后,HEAD 都会发生改变,你可以使用 cat .git/HEAD 来查看你当前所处的分支,我的是下面的样子:

➜  analyze-web git:(test) cat .git/HEAD
ref: refs/heads/test

我们可以把 HEAD 指向一个 git reflog 中的一个版本,而不是特定的分支,正如上边恢复分支时的操作:

git checkout 410de16

这种情形就被称作 detached HEAD 。

好啦,这篇文章就先写到这里。大家有什么问题可以评论留言,一起讨论。

你可能感兴趣的:(git分支)