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...