Git 是我們重要的版本紀錄工具,讓我們可以快速的在各個版本間切換,讓我們的工作目錄跟某個時刻的工作目錄一摸一樣。Git還有branch的概念把上下相關的版本連結在一起,方便我們做版本控制。
當我們使用 git 時,git object 會在背後運作,我們的 git object 存在 .git/objects 資料夾中,我們平常的commit、branch就放在這個地方。git object 紀錄著專案歷史中的每個commit,幫助git將我們的工作目錄變成過去的樣子。
雖然我們常常用 git,但我們鮮少知道在背後的 git object 到底長怎樣,也鮮少去徹底理解branch到底怎麼運作的。這篇文章描述了在git背後紀錄著各個commit的object,以及git如何實現branch的概念幫助我們管理版本。
Commits are snapshots, not diff
平常我們在 commit 時,會看到 git 顯示有多少 insertion 多少deletions,有可能會因此以為git 的版本是這些差異累積起來的,但實際上git在背後是存了一個個 snapshot,每一個版本的目錄跟檔案都被git完整的存了下來。
Git 做的事情就是將檔案系統按照時間做 snapshots。