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

相關文章
相關標籤/搜索