Detached HEAD

之前从未听过detached HEAD,学习Git的时候也没操练到,今天却在偶然情况下遇到了。

让HEAD进入这个Detached状态其实很简单,其实我之前也进入过,只不过不知道这个状态是Detached。只需要checkout一下之前的提交,就会让HEAD进入Detached的状态。

$ git log -2
commit 1301de9e07805cbe87fb1823eba5bc21b9c22442 (HEAD -> master, origin/master)
Author: jeffwcx <cunxuanwang@163.com>
Date: Fri May 4 12:31:54 2018 +0800

feat: just add meta and footer links

commit 032ed40c4df93bf2d4fc6b87f735a5471cc91287
Author: jeffwcx <cunxuanwang@163.com>
Date: Mon Apr 9 23:05:53 2018 +0800

feat: release source

我们切换到032ed这个提交

$ git checkout 032ed

git会明明白白地提示我们处于Detached状态

You are in 'detached HEAD' state.

也可以查看下分支,发现多了一个分支,这其实是个匿名分支

$ git branch -v
* (HEAD detached at 032ed40) 032ed40 feat: release source
master 1301de9 feat: just add meta and footer links

在处于这种状态下,我提交了一个版本,然后想提交到远程仓库。 结果当然是Everything up-to-date。其实想想也很简单,当前的master的指针指向032ed40,而远程分支也是032ed40,而我们又设置了master分支远程追踪,所以更新的提交当然没办法提交上去。要脱离这个状态,并把版本提交上去也很简单,我们可以基于当前HEAD新建一个临时分支,回到master分支做合并就可以了。

分享