Git 中 HEAD 游離的原因與解決方法

2021-09-11 09:31:20 字數 1396 閱讀 2230

git 中的 head 可以理解為指標,指向當前倉庫所處的分支。一般在有 git 管理的目錄下開啟 git 終端都能在當前路徑的尾巴上,看到所處的分支名。

還可以在命令列中輸入cat .git/head檢視當前 head 指向**。

一般它指向當前工作目錄所在分支的最新提交。

一般我們會使用命令git checkout

來切換分支,head 就會移動到指定的分支上。

但是,如果我們使用的是git checkout來切換到指定的某一次提交,head 就會處於「detached」狀態,也就是游離狀態

好處:head 處於游離狀態時,開發者可以很方便地在歷史版本之間互相切換,比如要回到某次提交,只需要checkout對應的commit id或者tag名即可。

弊端:若在該基礎上進行了提交,則會新開乙個「匿名分支」;也就是說我們的提交是無法可見儲存的,一旦切換到別的分支,原游離狀態以後的提交就不可追溯了。

下面我們來看看實際的例子。

首先檢視一下當前的分支情況,當前只有乙個master分支:

再來檢視下近期的log日誌:

然後假設我要回到倒數第二條 commit 時候的狀態,順便檢視下本地工作目錄狀態以及分支狀態:

可以看到,我還沒有修改和提交的情況下,切換完成就給我新建了乙個分支,並且指明head正游離在2772886上。

如果不做任何修改,想回到master分支,直接git checkout master即可,而不要 checkout master 主幹所對應的

順利回到主幹的話,head 的游離狀態會取消,原臨時游離分支也會消失。

如果是在游離狀態做了修改和提交,則:

切換會 master 分支時,在游離狀態所做的修改和提交無法追溯:

其實很簡單,剛才有仔細看終端提示的同學就會知道,在切換到游離狀態的時候應該新建乙個分支,然後我們所有的操作修改和提交都會儲存到該分支,head 也就指向了該分支最新提交的 commit id 處,而不會再處於游離狀態。

當在新建分支上修改提交完畢時,就切換回 master 分支,將原分支合併到 master 分支就萬事大吉了。 到這裡就不再操作演示了,大家都懂。

部分摘自《**git》: marklodato.github.io/visual-git-…

文章參考《git 手冊》: git-scm.com/docs/git-ch…

理解git中的head和master

在master分支上,head指向master,而master指向的是最近的一次提交。如下圖 當我們新建分支時,比如新建分支dev,dev會指向當前master分支的最近一次提交。當我們使用命令 git checkout dev切換到dev分支後,head就指向當前分支dev了。在dev上修改,比如...

理解Git中的HEAD和master

在master分支上,head指向master指標,而master指標指向的是最近的一次提交。如下圖 當我們新建分支時,比如新建dev分支,dev指標會指向當前master分支的最近一次提交。如下圖 切換到dev分支後,head指標就指向dev指標了。在dev分支上修改,然後提交,dev指標指向當前...

nginx cache不快取問題的原因與解決方案

nginx.conf 部分內容 nginx不快取原因 預設情況下,nginx是否快取是由nginx快取伺服器與源伺服器共同決定的,快取伺服器需要嚴格遵守源伺服器響應的header來決定是否快取以及快取的時常。header主要有如下 cache control no cache n 如果出現這兩值,n...