参考链接
《git detached from head》————夜空霓虹
《git checkout 命令详解》————胡涛儿
《git问题记录–如何从从detached HEAD状态解救出来》————馒头MT
《git cherry-pick. 如何把已经提交的commit, 从一个分支放到另一个分支》————sg552
git之head detached from [xxx]
头部从某提交分离?
近期发现,android studio提交的时候提示head detached from [xxx]
,不知道是什么意思,百度了之后大概了解了一下,就是不知道是不是之前操作什么,导致我的一次提交没提交到Head指向的分支,这是很危险,意味当前提交不属于任何分支。
git checkout master
的时候,提示有5个提交没有链接任何一个分支,同时也给出了解决方式
1 | $ git checkout master |
git log
查看当前分支历史提交记录,发现并没有那五个提交记录,显然脱离了master分支
通过合并分支来解决
可以用以下方式来解决
- 创建一个临时分支,将detach出来的提交,合并到临时分支中
- 将临时分支merge到工作分支中。
- 删除临时分支
创建临时分支
注意此命令并未立即切换到临时分支
1 git branch temp 15c2a61
将其他detach的一起合并到temp
1 | git checkout temp #切换到temp分支 |
所以合并期间可能会出现合并冲突(cherry-pick为优选的意思,意思是取一个最优的提交来合并,有时候懂英文理解得比较快)
上面可以看到提示冲突后,会CHERRY-PICK模式,在这期间无法切换分支等其他操作。会提示某文件冲突,**我们可以打开对应文件,会发现会有以下符号
1
2
3
4
5 >>>>>>>> HEAD
HEAD指向的分支代码
========
某提交的代码
>>>>>>>> 某提交信息commit messages箭头和等号是Git用来区别不同分支或者提交的不同内容,通常我们保留最新的分支修改就可以了。然后再通过以下代码完成合并
1 | git add 某文件路径 |
多次使用
git cherry-pick [commitid]
将其他几个提交合并
切换到master分支,将temp合并到master分支
git checkout master
git merge temp #使用此命令可能也会有冲突
发生冲突后,进入了MERGING模式,跟上面的方法一样进入对应文件修改,然后
git add
和git commit
然后git merge temp
,可以使用git log
打印提交信息查看是否合并成功