在使用git的項目中,有個隱藏目錄.git,這個是git的版本庫。
- git的版本庫中存了很多東西,其中就包括git暫存區也即稱為stage(或index)的暫存區。
- 使用git後,git會自動為我們創建第一個分支master,master分支也即為一個目錄樹
- 圖中的head是執行master分支的一個遊標,也即圖中的head可以被master來替換
- 圖中的objects標識的區域是git對象庫,在.git/object目錄下
- 當對工作區中文件內容進行修改後,執行git add時,暫存區的目錄樹就會被更新。同時工作區修改的文件內存會被寫入到版本庫中的一個新對象中,此對象的id被記錄在暫存區的文件索引中
- 執行git commit,暫存區的目錄樹寫到版本庫中,master分支會進行對應的更新。即master最新指向的目錄樹就是原暫存區的目錄樹
- 當執行git reset head命令,暫存區的目錄樹會被重寫,被master分支執行的目錄樹所替換,但是工作區不受影響
- 當執行git rm -cached <file> 命令時,會刪除暫存區指定文件,工作區不受影響
- 當執行git checkout .或者git checkout -<file>命令時,會把暫存區全部或指定的文件替換工作區的文件。這個操作很危險,會清除工作區未添加到暫存區的改動的內容
- 當執行git checkout HEAD .或者git checkout -<file>命令時,會用HEAD指向master分支中的全部或者部分文件替換暫存區以及工作區的文件。這個命令不但會清除工作區中未提交的改動,還會清除暫存區中未提交的改動。
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。