【工作小插曲】git HEAD 游离正确处理

今天公司更新代码的时候提示Git HEAD detached...,好久没有遇到过了。

HEAD,就是头指针,纸箱目前当前分支的最新提交。当使用git checkout 分支名的时候会指到到相应的分支。

git checkout.jpg

有一种情况,就是使用了git checkout commitid。

这时候会导致新建了一个匿名分支,这时候提交代码commit之后,如果直接切其他分支,刚才提交的代码会全部丢失!!具体解决方法有两个:

1、git stash 储存起来然后切回主分支,再git stash pop弹出,解冲突。
2、创建临时分支,切回主分支,merge解冲突。

实例场景演示

创建一些提交,如下,目前分支为master分支。


init.png

1、某一天要会看某次提交之后代码,为了方便就直接git checkout commitid


git checkout commitid.jpg

2、之后忘记了这件事,那天下午直接在上面改代码,改完git status看了一下发现这个提示。

head detached.jpg

这时候如果直接git add、git commit,然后git checkout master就会导致修改的代码全部没掉(当然,如果没有修改直接git checkout master就行)。可以通过git branch看见目前在一个匿名分支当中。

匿名分支.jpg

此时,正确的做法有两种:
方法1、通过git stash,如果有冲突解冲突,解完add、commit即可。

git stash
git checkout master
git stash pop
方法1.jpg

方法2、创建一个临时分支并提交,然后切回主分支merge,如果有冲突还是解重复图然后add commit即可,最后删除临时分支。

git checkout -b temp
git add .
git commit
git checkout master
git merge temp
解冲突然后add commit
git branch -d temp
方法2.jpg
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • git常用命令 GIT常用命令备忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章阅读 8,668评论 1 26
  • Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这样一来,任何一处协同...
    __silhouette阅读 15,990评论 5 147
  • 犀溪水畅浪白波, 透亮清澈无混浊。 阵阵轻风天爽朗, 花儿绿草满山坡。
    张邦祥阅读 210评论 0 1
  • 沉闷,心情很复杂,未有的恐惧,我亲爱的人……,又是一天端午佳节,你总是那么热心,忙完家里的你又跑去邻家帮忙,可是你...
    未有的恐惧阅读 335评论 0 0
  • 文/意磬 [25]卧底 目录及简介 自从上次滑旱冰认识王皓然以后,美娜对他充满了好奇,这种好奇只是对他家的背景还有...
    意磬阅读 828评论 22 32