本章介绍一下Git HEAD detached及其对应的解决办法。
1. 什么是HEAD
Git中的HEAD可以理解为一个指针,我们可以在命令行中输入cat .git/HEAD
查看当前HEAD指向哪,一般它指向当前工作目录所在分支的最新提交:
当使用git checkout <branch_name>
切换分支时,HEAD会移动到指定分支:
但是如果使用的是git checkout <commit-id>
,即切换到指定的某一次提交,HEAD就会处于detached
(游离)状态。
2. HEAD游离状态的利弊
HEAD处于游离状态时,我们可以很方便地在历史版本之间互相切换。比如需要回到某次提交,直接checkout
对应的commit-id
或者tag
名即可。
它的弊端就是: 它在这个基础上的提交会新开一个匿名分支
也就是说我们的提交是无法可见保存的,一旦切到别的分支,游离状态以后的提交就不可追溯了。
解决办法就是新建一个分支保存游离状态后的提交:
3. 具体解决操作
1) 查看当前分支状况
2) 新建一个temp分支,把当前提交的代码放到整个分支
3) checkout要回到的那个分支
这里我们要回到master
分支:
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
4) 然后merge刚才创建的临时分支
通过merge
操作把临时分支上的提交合并到master
分支上来:
5) 查看合并后的结果,有冲突就解决
6) 合并OK,就提交到远程
7) 删除刚才创建的临时分支
[参看]
- Git HEAD detached