Git HEAD詳解
很多Git使用者對HEAD有所瞭解,但僅限於它指向當前所在的分支。
本文將較為詳細深入的介紹一下HEAD到底是什麼。
首先看一下當前分支的提交記錄,程式碼如下:
[Shell] 純文字檢視 複製程式碼$ git log --oneline
程式碼執行效果截圖如下:
由上圖可以看到HEAD指向master分支,master分支指向sha-1值為93dd8e(縮寫)的commit提交。
下面看一個更為形象的圖示:
一.HEAD是什麼:
HEAD是一個指標,通常情況下它可以將它與當前分支等同(其實它是指向當前分支)。
.git目錄中有一個為HEAD的檔案,它記錄著HEAD的內容,檢視其中內容程式碼如下:
[Shell] 純文字檢視 複製程式碼$ cat .git/HEAD
程式碼執行效果截圖如下:
可以看到HEAD指向master分支,下面再來看一下refs/heads/master中的內容:
[Shell] 純文字檢視 複製程式碼$ cat .git/refs/heads/master
程式碼執行效果截圖如下:
master分支也只是一個存放40位sha-1值的檔案而已,正是當前分支所指向commit的sha-1值。
二.切換分支:
當前位於master,現在切換到Develop分支,程式碼如下:
[Shell] 純文字檢視 複製程式碼$ git checkout Develop
程式碼執行效果截圖如下:
可以看到現在已經切換到分支Develop。
現在再來檢視HEAD檔案的內容,程式碼如下:
[Shell] 純文字檢視 複製程式碼$ cat .git/HEAD
程式碼執行效果截圖如下:
現在已經指向Develop分支。
下面再來看一下refs/heads/Develop中的內容:
[Shell] 純文字檢視 複製程式碼$ cat .git/refs/heads/Develop
程式碼執行效果截圖如下:
也就是說HEAD通常會指向當前所在分支。
三.detached HEAD:
當HEAD沒有指向某個分支,而是指向一個commit,則會形成detached HEAD。
此概念會在單獨一章節介紹,具體參閱Git detached HEAD介紹一章節。
四.HEAD縮寫形式:
Git 1.8.5版本之後,HEAD有一個縮寫形式@,確實可以省略幾個字元。
[Shell] 純文字檢視 複製程式碼$ git reset HEAD^
上面程式碼可以縮寫為以下形式:
[Shell] 純文字檢視 複製程式碼$ git reset @^
雖然是少些了幾個字元,但是總感覺不能夠見詞達意,好像失去了一點什麼。
相關文章
- detached HEAD詳解
- detached HEAD 詳解
- Git HEADGit
- [Original] What's HEAD, FETCH_HEAD and ORIG_HEAD in GitGit
- git reset --hard HEAD^Git
- Git詳解Git
- 介面請求 (get、post、head 等) 詳解
- 介面請求(get、post、head等)詳解
- git使用詳解Git
- Git ORIG_HEAD用法介紹Git
- git-----You have not concluded your merge (MERGE_HEAD exists)解決Git
- git init命令詳解Git
- git stash用法詳解Git
- git checkout命令詳解Git
- Git Reference引用詳解Git
- Git物件概念詳解Git物件
- git status命令詳解Git
- git add命令詳解Git
- Git 命令大全,詳解!Git
- git checkout 命令詳解Git
- git remote 命令詳解GitREM
- git fetch & pull詳解Git
- git ssh配置詳解Git
- Visual Studio 使用GIT詳解Git
- git diff --stat命令詳解Git
- 詳解git rebase,讓你走上git大神之路Git
- Git詳解及github的使用Github
- Git基礎知識詳解Git
- git log提交歷史詳解Git
- git diff 輸出格式詳解Git
- Git tag標籤用法詳解Git
- git config配置檔案詳解Git
- git show-branch命令詳解Git
- Git 學習之命令詳解Git
- Git 常用命令詳解Git
- Git詳解和Github的使用Github
- git checkout 命令詳解—— Git 學習筆記 16Git筆記
- git cherry-pick 詳解 —— Git 學習筆記 18Git筆記