乐趣区

关于git: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 <branch_name> 后,HEAD 都会产生扭转,你能够应用 cat .git/HEAD 来查看你以后所处的分支,我的是上面的样子:

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

咱们能够把 HEAD 指向一个 git reflog 中的一个版本,而不是特定的分支,正如上边复原分支时的操作:

git checkout 410de16

这种情景就被称作 detached HEAD。

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

退出移动版