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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM