在日常的开发中 可能会遇到一些功能并行开发,这样在你的本地代码仓库就会出现多个分支。这样时间久了,很容易忘记当初分支上都做了什么,而且还可能因为记忆错误而把分支误删,恰好你当时也没有把本地的分支推送到远程。
本文就来记录一下我曾经是如何将误删的分支恢复的。
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.
你可以把HEAD理解为你当前所处的分支,每次当你使用 git checkout
➜ analyze-web git:(test) cat .git/HEAD
ref: refs/heads/test
我们可以把 HEAD 指向一个 git reflog 中的一个版本,而不是特定的分支,正如上边恢复分支时的操作:
git checkout 410de16
这种情形就被称作 detached HEAD 。
好啦,这篇文章就先写到这里。大家有什么问题可以评论留言,一起讨论。