Git 中 HEAD、工作樹和索引之間的區別
一、HEAD
在git
中,可以存在很多分支,其本質上是一個指向commit
物件的可變指標,而Head
是一個特別的指標,是一個指向你正在工作中的本地分支的指標
簡單來講,就是你現在在哪兒,HEAD 就指向哪兒
例如當前我們處於master
分支,所以HEAD
這個指標指向了master
分支指
然後通過呼叫git checkout test
切換到test
分支,那麼HEAD
則指向test
分支,如下圖:
但我們在test
分支再一次commit
資訊的時候,HEAD
指標仍然指向了test
分支指標,而test
分支指標已經指向了最新建立的提交,如下圖:
這個HEAD
儲存的位置就在.git/HEAD
HEAD
指向了另一個檔案
$ cat .git/HEAD ref: refs/heads/master $ cat .git/refs/heads/master 7406a10efcc169bbab17827aeda189aa20376f7f
這個檔案的內容是一串雜湊碼,而這個雜湊碼正是master
分支上最新的提交所對應的雜湊碼
所以,當我們切換分支的時候,HEAD
指標通常指向我們所在的分支,當我們在某個分支上建立新的提交時,分支指標總是會指向當前分支的最新提交
所以,HEAD指標 ——–> 分支指標 ——–> 最新提交
二、工作樹和索引
在Git
管理下,大家實際操作的目錄被稱為工作樹,也就是工作區域
在資料庫和工作樹之間有索引,索引是為了向資料庫提交作準備的區域,也被稱為暫存區域
Git
在執行提交的時候,不是直接將工作樹的狀態儲存到資料庫,而是將設定在中間索引區域的狀態儲存到資料庫
因此,要提交檔案,首先需要把檔案加入到索引區域中。
所以,憑藉中間的索引,可以避免工作樹中不必要的檔案提交,還可以將檔案修改內容的一部分加入索引區域並提交
三、區別
從所在的位置來看:
-
HEAD 指標通常指向我們所在的分支,當我們在某個分支上建立新的提交時,分支指標總是會指向當前分支的最新提交
-
工作樹是檢視和編輯的(源)檔案的實際內容
-
索引是放置你想要提交給 git倉庫檔案的地方,如工作樹的程式碼通過 git add 則新增到 git 索引中,通過git commit 則將索引區域的檔案提交到 git 倉庫中