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