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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM