在使用 git 時(shí)雏掠,會(huì)冷不丁彈出一些術(shù)語斩祭,在之前可能沒有聽過,突然之間心情就緊張起來了乡话。
其中就有一個(gè)分離頭指針(detacged HEAD)
分離頭指針
有時(shí)你在切換分支時(shí)摧玫,輸了一個(gè)commit
信息
git 給你的提示,你現(xiàn)在正在基于這個(gè)commit
做操作绑青。
你現(xiàn)在正處在分離頭指針狀態(tài)席赂,你可以做一些變更然后產(chǎn)生commit
,你也可以把生成的commit
丟棄掉时迫。也就是說你在分離頭指針狀態(tài)下颅停,可以繼續(xù)開發(fā),但不影響其他開發(fā)掠拳,它的本意是:現(xiàn)在正在工作在沒有分支的狀態(tài)下癞揉。
下面具體演示下分離頭指針的操作。
現(xiàn)在修改了 style/style.css 文件溺欧,并且commit
了
這時(shí)候用git log
查看歷史信息時(shí)喊熟,發(fā)現(xiàn)之前HEAD
這變都會(huì)指向一個(gè)分支,然而這邊卻沒有姐刁。這個(gè)就叫分離頭指針狀態(tài)
假設(shè)這是你接到了一個(gè)任務(wù)芥牌,需要切換分支
它會(huì)有一個(gè)警告說:現(xiàn)在有一個(gè)commit
沒有加到分支上去。也就是說這個(gè)commit
一會(huì)會(huì)被垃圾清理掉聂使。我們可以gitk --all
來查看有沒有add main
的commit
信息壁拉。
從上圖可以看出,這個(gè)commit
沒有和某個(gè)分支綁著柏靶,也沒有和某個(gè)tag
綁著弃理,在 git 眼里,這種commit
日后都是要被清除的屎蜓。
假如這個(gè)時(shí)候我醒悟過來了痘昌,覺得這個(gè)commit
很重要,按照它的指示信息建一個(gè)分支炬转,將它保留下來辆苔。
此時(shí)你可以看到add main
的commit
被保留了下來。
如果你想要添加到某個(gè)分支上扼劈,再用merge
比如你想添加到master
分支上驻啤,將HEAD
切換到master
分支,然后用git merge css
测僵,就將這次commit
添加到master
上了街佑。
進(jìn)一步理解 HEAD 和 branch
git ckeckout -b fix_bug temp //新分支
git diff commit信息 commit信息 //比較兩個(gè) commit 之間的差異
git diff HEAD HEAD^ //等價(jià)于下面這條命令
git diff HEAD HEAD~1 //等價(jià)于上面這條命令