今天公司更新代码的时候提示Git HEAD detached...,好久没有遇到过了。
HEAD,就是头指针,纸箱目前当前分支的最新提交。当使用git checkout 分支名的时候会指到到相应的分支。
有一种情况,就是使用了git checkout commitid。
这时候会导致新建了一个匿名分支,这时候提交代码commit之后,如果直接切其他分支,刚才提交的代码会全部丢失!!具体解决方法有两个:
1、git stash 储存起来然后切回主分支,再git stash pop弹出,解冲突。
2、创建临时分支,切回主分支,merge解冲突。
实例场景演示
创建一些提交,如下,目前分支为master分支。
1、某一天要会看某次提交之后代码,为了方便就直接git checkout commitid
2、之后忘记了这件事,那天下午直接在上面改代码,改完git status看了一下发现这个提示。
这时候如果直接git add、git commit,然后git checkout master就会导致修改的代码全部没掉(当然,如果没有修改直接git checkout master就行)。可以通过git branch看见目前在一个匿名分支当中。
此时,正确的做法有两种:
方法1、通过git stash,如果有冲突解冲突,解完add、commit即可。
git stash
git checkout master
git stash pop
方法2、创建一个临时分支并提交,然后切回主分支merge,如果有冲突还是解重复图然后add commit即可,最后删除临时分支。
git checkout -b temp
git add .
git commit
git checkout master
git merge temp
解冲突然后add commit
git branch -d temp