Git 中的物件模型和檔案的詳細檢視 —— Git 學習筆記 13
Git 中的物件模型和檔案的詳細檢視
本文將用幾幅圖來視覺化一個叫
file1
的檔案從修改到暫存,再到提交的整個過程。相信會對你理解 Git 有一些幫助。
初始狀態
初始狀態如下圖所示:
可以看到,工作目錄包含file1
和file2
兩個檔案,分別包含內容 “foo” 和 “bar”.
除了工作目錄下的file1
和file2
之外,master 分支上有一個提交(初始提交),用圓形表示。它指向的三角形其實是一棵樹(你可以把它想象成目錄),樹指向了和file1
和file2
內容完全一樣的 “foo” 和 “bar”.
索引中的那個三角形,和物件庫的那棵樹是完全一樣的,它們都指向相同的物件(“foo” 和 “bar”)。
這幅圖還告訴我們,分支就是一個指標,指向某個提交。
目前來看,工作區、索引、物件庫是完全一致的,沒有什麼是髒的。
編輯一個檔案之後
如圖所示,當把檔案file1
的內容從 “foo” 改成 “quux” 之後,索引和物件庫並沒有變化,但是工作目錄髒了,因為它和索引不一致了。
暫存檔案後
當執行命令git add file1
後,一些有趣的變化發生了。
Git 首先取出工作目錄中file1
的最新版本(“quux”),為它的內容計算出一個 SHA1 雜湊 ID(bd71363),然後把這個 ID 儲存在物件庫中(當然,檔案內容也會儲存在物件庫中)。接下來,Git 會改變索引,讓索引指向新的file1
。由於檔案file2
沒有變化,所以索引依然指向原來的file2
。
此時,工作目錄與索引是一致的。但是,索引和物件庫不一致。
提交之後
啊呀,提交之後好像圖示有點亂啊。彆著急,我來解釋一下。
首先,索引物件轉化成了一個真實的樹物件(深色的三角形),這個物件會以 SHA1 命名(圖上沒有標出來而已),被放到物件庫中。
其次,用你的日誌訊息建立了一個新的提交物件(深色的圓形)。新的提交物件會指向新建立的樹物件,並且指向前一個提交。
最後,master 分支的引用從最近一次提交移動到新建立的提交。
此時,工作目錄、索引和物件庫再次同步,又變得一致了。
參考資料
《Git 版本控制管理(第2版)》,人民郵電出版社
相關文章
- git詳細筆記Git筆記
- Git和Maven的學習筆記GitMaven筆記
- 檢視提交歷史 —— Git 學習筆記 11Git筆記
- git checkout 和 git reset 的區別 —— Git 學習筆記 09Git筆記
- 忽略某些檔案 —— Git 學習筆記 05Git筆記
- Git的學習筆記Git筆記
- git checkout 命令詳解—— Git 學習筆記 16Git筆記
- Git 檢視檔案的歷史Git
- Git 的特點—— Git 學習筆記 02Git筆記
- git 和 vim 學習筆記Git筆記
- git reset 命令詳解(二)—— Git 學習筆記 08Git筆記
- git reset 命令詳解(一)—— Git 學習筆記 07Git筆記
- git cherry-pick 詳解 —— Git 學習筆記 18Git筆記
- GIT學習筆記一git initGit筆記
- git學習筆記Git筆記
- Git學習2 --- Git安裝詳細步驟Git
- git檢視檔案內容Git
- git檢視指定提交檔案的內容Git
- Pro Git 學習筆記Git筆記
- Git命令學習筆記Git筆記
- git學習筆記5Git筆記
- git學習筆記6Git筆記
- git學習筆記(一)Git筆記
- git學習筆記(二)Git筆記
- Git—學習筆記1Git筆記
- git學習筆記 1Git筆記
- git學習筆記1Git筆記
- 【Git】學習筆記–clone和本地修改Git筆記
- GIT初學者詳細指令學習Git
- Git 的安裝與初次使用 —— Git 學習筆記 03Git筆記
- Git 分支的建立與切換 —— Git 學習筆記 14Git筆記
- 取得 Git 倉庫 —— Git 學習筆記 04Git筆記
- git rebase(變基)—— Git 學習筆記 19Git筆記
- git常用命令-Git學習筆記Git筆記
- Git 詳細的操作指南筆記(從零開始)Git筆記
- Git檢視指定檔案的sha-1值Git
- Git極簡學習筆記Git筆記
- git入門學習筆記Git筆記