git的detached HEAD指针

在使用的git的时候,想回到上个版本,但是由于不熟悉命令用了check out xxxxx,于是在之后的git status的命令之后

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

 

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

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

需要将工作区的文件一块回退可以这样

git reset --hard <版本号>

 

然后checkout是什么鬼呢,checkout将暂存区的文件变成需要checkout的暂存区文件,所以

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

git checkout -b -newbranch [<start_point>]
这样用可以创建新的分支并切换到新分支上去,b代表branch的意思,newbranch 是新分支的名称,如果没有指定提交点(start_point),默认从HEAD指向的提交创建分支。这里的提交点感觉是指这个: 分出去分支的位置,因为git里不是有好多版本吗~~~~

 

所以呢,真相只有一个,我用了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

 

posted on 2016-02-08 10:39  远近闻名的学渣  阅读(5472)  评论(0编辑  收藏  举报

导航