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