【學(xué)了就忘】Git操作 — 67.分離頭指針狀態(tài)

1、什么是分離頭指針狀態(tài)

Git在使用的時(shí)候有一種狀態(tài),叫做分離頭指針狀態(tài)双炕,也叫detached HEAD

我們之前的更新中可以了解到撮抓,在Git中HEAD指針指向分支妇斤,而分支是指向提交。所謂的分離頭指針狀態(tài)就是HEAD指針不再指向分支丹拯,而是直接指向某個(gè)commit站超。

正常狀態(tài)結(jié)構(gòu)圖:


分離頭指針狀態(tài)結(jié)構(gòu)圖:

即:分離頭指針狀態(tài)就是指HEAD指針脫離了分支指針。

2乖酬、復(fù)現(xiàn)分離頭指針場景

(1)查看當(dāng)前版本庫狀態(tài)

1)查看當(dāng)前工作的分支

當(dāng)前工作在master分支上死相。

2)查看當(dāng)前版本庫日志

(2)場景復(fù)現(xiàn)

可能這個(gè)時(shí)候,我們對(duì)其中某一個(gè)commit很感興趣咬像。

比如:對(duì)temp分支提交的temp2.txt文件很感興趣算撮,想切換到temp分支上去研究一下。

在切換分支的時(shí)候县昂,會(huì)出現(xiàn)這么一種情況肮柜。要執(zhí)行git checkout 分支名命令,但是執(zhí)行了git checkout + commit_id倒彰。不小心把分支名稱的位置审洞,寫成了你感興趣的那個(gè)提交的ID了。

如下圖所示:

說明上圖中出現(xiàn)一長串信息:

  • Note: checking out '40e2e66'.:Git正在基于這個(gè)commit待讳,做一個(gè)切換分支(checkout)的活動(dòng)芒澜。
  • You are in ' detached HEAD' state. You can look around, make experimental changes,and commit them, and you can discard any commits you make in this state without
    你正處在分離頭指針的狀態(tài),你可以做一些變更產(chǎn)生commit耙箍,或者你也可以把這些commit丟棄掉撰糠。
    (就是在分離頭指針的狀態(tài)下你可以繼續(xù)做開發(fā),然后繼續(xù)產(chǎn)生commit辩昆,而且不會(huì)影響其他分支)

解釋一下:

  • 分離頭指針狀態(tài)的含義,其實(shí)本質(zhì)上是說我們現(xiàn)在正工作在一個(gè)沒有分支的狀態(tài)下旨袒。
  • 不好的方面:
    在這分離頭指針狀態(tài)下汁针,你可以繼續(xù)產(chǎn)生commit,并且不會(huì)影響到其他的分支砚尽。如果你有需要切換到其他的分支需求施无,這個(gè)時(shí)候一旦切換,那分離頭指針狀態(tài)下開發(fā)出來的commit必孤,因?yàn)闆]有branch和他掛鉤猾骡,這些沒有branch掛鉤的commit瑞躺,最后很可能被Git當(dāng)作垃圾給清除掉,所以這個(gè)是他危險(xiǎn)的地方兴想。
    也就是說如果你想變更工作分支幢哨,請(qǐng)先把這些提交和某個(gè)分支掛鉤,此時(shí)這些commit嫂便,Git是永遠(yuǎn)不會(huì)把他清除掉的捞镰,這就是分離頭指針使用的時(shí)候需要注意的地方。
  • 好的一方面:
    就是我們想做一些變更毙替,而這個(gè)變更你只是嘗試性的變更岸售,沒準(zhǔn)實(shí)踐下來你覺得效果不好,你完全隨時(shí)可以把他扔掉厂画,扔掉就是你不要去理會(huì)他凸丸,你切換到新的分支就可以了,這就是分離頭指針狀態(tài)帶來的好處。

上面的提示信息也進(jìn)行了說明:

If you want to create a new branch to retain commits you create, you maydo so(now or later) by using -b with the checkout command again.

Example: git checkout-b <new-branch-name>

如果您想創(chuàng)建一個(gè)新的分支來保留您創(chuàng)建的提交袱院,您可以(現(xiàn)在或以后)通過使用git checkout -b命令來實(shí)現(xiàn)屎慢。

示例:git checkout -b <new branch name>

最后還提示你:

HEAD is now at 40e2e66 temp分支提交文本temp2.txt

提示HEAD指針正在指向的位置是,40e2e66對(duì)應(yīng)的commit上坑填。

3抛人、分離頭指針狀態(tài)下操作

上邊場景中,我們已經(jīng)進(jìn)入了分離頭指針狀態(tài)脐瑰。我們進(jìn)行一些操作妖枚,看看會(huì)有什么情況發(fā)生。

(1)修改temp2.txt文件內(nèi)容

在文件中添加一行66666666666666苍在。

(2)查看Git暫存區(qū)文件狀態(tài)

可以看到Git又在提示我們绝页,HEAD detached at 40e2e66
說明此時(shí)的HEAD指針沒有指向任何的分支寂恬,而是指向了某一個(gè)沒有分支的commit续誉。

(3)提交此次變更

可用一種偷懶的方式,但不推薦使用初肉,從工作區(qū)直接提交到版本庫中酷鸦。
執(zhí)行命令$ git commit -am '修改temp2.txt文件內(nèi)容'

(4)查看一下Git版本歷史情況

這里請(qǐng)大家留意一下HEAD的位置,之前的HEAD出現(xiàn)牙咏,總是和某一個(gè)分支綁在一起的臼隔,此時(shí)這個(gè)HEAD并沒有任何的分支綁定,這個(gè)就叫分離頭指針的狀態(tài)妄壶。

(5)查看一下本地倉庫分支情況

也證明了此時(shí)正工作在分離頭指針狀態(tài)

4摔握、分離頭指針狀態(tài)不好的情況

(1)假如這個(gè)時(shí)候,需要去做其他的任務(wù)丁寄,要切換到master分支氨淌。

執(zhí)行命令$ git checkout master

可以從上圖中看到泊愧,Git會(huì)發(fā)出一段警告:

  • Warning:you are leaving 1 commit behind,not connected to any of your branches:
    25d5574 修改temp2.txt文件內(nèi)容
    說有一個(gè)提交,ID值25d5574的commit 盛正,未連接到任何分支删咱,也就是這個(gè)commit沒有加入到任何分支。
  • If you want to keep it by creating a new branch,this may be a good time to do so with:
    git branch <new-branch-name> 25d5574
    這里還再一次友情提示你蛮艰,如果您想創(chuàng)建一個(gè)新的分支來保留它腋腮,那么現(xiàn)在可能是一個(gè)很好的時(shí)機(jī)。
    執(zhí)行git branch <new-branch-name> 25d5574 命令來創(chuàng)建壤蚜。
  • Switched to branch 'master':并且在最后告知你即寡,你已經(jīng)切換到master分支了。

(2)查看想在的分支情況

我們操作到上面步驟袜刷,不做任何操作聪富,通過gitk --all來查看現(xiàn)在的分支情況。

發(fā)現(xiàn)圖中的Git歷史樹中著蟹,并沒有看到我們之前提交的25d5574commit墩蔓。

說明在Git眼中,你沒有把一個(gè)commit跟某個(gè)分支綁定萧豆,也沒有把這個(gè)commit跟某個(gè)tag綁定奸披。那在Git的眼里,這種commit都是不重要的涮雷,是日后都要被清除的阵面。

(3)保留分離頭指針狀態(tài)下修改的內(nèi)容

如果這個(gè)時(shí)候我突然覺的這個(gè)commit很重要,(此時(shí)已經(jīng)切換了分支)洪鸭,還可以繼續(xù)按照他的指示信息样刷。

執(zhí)行命令$ git branch newbar 25d5574

再創(chuàng)建一個(gè)分支览爵,把之前的commit保留下來置鼻。

之后,在通過gitk工具查看一下蜓竹。

這個(gè)修改temp2.txt文件內(nèi)容的commit又出現(xiàn)了箕母,并被保存在新創(chuàng)建的分支上。

(圖中的分支線條乍一看俱济,可能優(yōu)點(diǎn)亂司蔬,按照分支線路慢慢看,是能看明白的)

5姨蝴、總結(jié)

  • 分離頭指針狀態(tài)指的是,HEAD指針不再指向分支肺缕,而是直接指向某個(gè)commit左医。
  • 一個(gè)變更(提交)沒有基于任何的branch(分支)去操作時(shí)授帕,當(dāng)你進(jìn)行分支切換的時(shí)候,在分離頭指針上產(chǎn)生的commit浮梢,很可能會(huì)被Git當(dāng)作垃圾清理掉跛十。如果你認(rèn)為這些變更是重要的,要切記一定要和某個(gè)分支綁定在一起秕硝。
  • 通過上邊練習(xí)的例子芥映,我們發(fā)現(xiàn)在使用Git的時(shí)候,一定學(xué)會(huì)好好的看Git給出的提示远豺。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末奈偏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子躯护,更是在濱河造成了極大的恐慌惊来,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棺滞,死亡現(xiàn)場離奇詭異裁蚁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)继准,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門枉证,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人移必,你說我怎么就攤上這事室谚。” “怎么了避凝?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵舞萄,是天一觀的道長。 經(jīng)常有香客問我管削,道長倒脓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任含思,我火速辦了婚禮崎弃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘含潘。我一直安慰自己饲做,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布遏弱。 她就那樣靜靜地躺著盆均,像睡著了一般。 火紅的嫁衣襯著肌膚如雪漱逸。 梳的紋絲不亂的頭發(fā)上泪姨,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天游沿,我揣著相機(jī)與錄音,去河邊找鬼肮砾。 笑死诀黍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的仗处。 我是一名探鬼主播眯勾,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼婆誓!你這毒婦竟也來了吃环?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤旷档,失蹤者是張志新(化名)和其女友劉穎模叙,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鞋屈,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡范咨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厂庇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渠啊。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖权旷,靈堂內(nèi)的尸體忽然破棺而出替蛉,到底是詐尸還是另有隱情,我是刑警寧澤拄氯,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布躲查,位于F島的核電站,受9級(jí)特大地震影響译柏,放射性物質(zhì)發(fā)生泄漏镣煮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一鄙麦、第九天 我趴在偏房一處隱蔽的房頂上張望典唇。 院中可真熱鬧,春花似錦胯府、人聲如沸介衔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炎咖。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間塘装,已是汗流浹背急迂。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蹦肴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓猴娩,卻偏偏與公主長得像阴幌,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子卷中,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容