在使用的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