1. 程式人生 > 其它 >Git 中 HEAD、工作樹和索引之間的區別

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 倉庫中