https://blog.csdn.net/qq_35008279/article/details/97108202
git checkout 到 某个分支,切换后发现并没有切换到该分支,而是切到了该分支的最新节点,无论如何都回不到分支头,记录这个问题。
命令:
git checkout origin/分支名
结果:
HEAD is now at 3691a4a5f 节点信息
(HEAD detached at origin/分支名)
正常情况下,HEAD指向一个branch,而branch又指向一个commit。
detached HEAD state指的是HEAD指针没有指向任何的branch,而是指向了一个commit。
我也可以提交,这个时候,commit链就在git checkout这个commit的基础上展开,但是如果直接离开到一个branch上的话,这些commits就会被当成garbage,被git garbage collection routine所回收。但是,我们也可以保留这些commits,又下面三种方式:
$ git checkout -b foo ,创建一个branch指向这个commit链,然后HEAD指向这个branch,于是HEAD就不是处于detached state。
$ git branch foo,创建一个branch指向这个commit链,但是HEAD还是处于detached state。
$ git tag foo,创建一个tag指向这个commit链,HEAD还是处于detached state。
3 为什么git checkout origin/XXX远程分支的时候会让HEAD进入detached state
因为HEAD不能指向远程分支,它只能指向本地的某个commit或者本地分支。当"git checkout 远程分支",而本地又没有这个分支,HEAD就会直接指向远程分支指向的commit了,HEAD指向commit就会进入detached HEAD state。
这个时候可以
git checkout -b 分支名
HEAD就恢复正常,并且local brach web-zach就会跟踪远程分支origin/分支名