git的detached HEAD指针

在使用的git的时候,想回到上个版本,可是因为不熟悉命令用了check out xxxxx,因而在以后的git status的命令以后git

都会看见一行字说detached HEAD。看的我很是难受-----踏入git之门第二步的时候到了- -安全

 

讲道理的话,正确的退回方式是这样的指针

git reset <版本号>,但reset的默认方式一般只是把当前版本回退了,并不会影响工做区的内容it

须要将工做区的文件一块回退能够这样ast

git reset --hard <版本号>命名

 

而后checkout是什么鬼呢,checkout将暂存区的文件变成须要checkout的暂存区文件,因此文件

checkout <分支名> 如git checkout master就将暂存区刷成最新的master分支,而后HEAD指针也指过去poi

git checkout -b -newbranch [<start_point>]
这样用能够建立新的分支并切换到新分支上去,b表明branch的意思,newbranch 是新分支的名称,若是没有指定提交点(start_point),默认从HEAD指向的提交建立分支。这里的提交点感受是指这个: 分出去分支的位置,由于git里不是有好多版本吗~~~~co

 

因此呢,真相只有一个,我用了checkout <版本号> ,首先暂存区的文件是退回去了,而后git开了个临时的未命名的分支,提交点就是那个<版本号>,而后我天真的继续commit的话,也只能commit到这个临时分支上,同时,因为HEAD指针指到了一个未命名的分支,就变成了detached HEAD,工作

因此,正确安全碉堡的作法是这样的:

1, git branch thank_god_it_is_safe <在临时分支上最后一次提交版本的版本号>    # 给这个分支加个名字

2,   git checkout <刚才在用的分支,好比master +_+ >       #              切换回刚才在用的本地分支或者其余什么奇怪的分支,反正就是你要回去的那个分支

3,   git merge thank_god_it_is_safe                     #              把在临时分支上的改动merge回来,一看修改是否是回来了

4,   git branch -d thank_god_it_is_safe                #      再把这个奇怪的分支删掉^_^, OK

相关文章
相关标签/搜索