前一篇文章中,我們學會了版本控制、建立了第一個版本節點,但對於其中細節並沒有特別解釋,你可能也會很想知道:「所以,commit 到底是什麼?」今天這篇文章,我們就來真正理解 commit 的本質,以及它在 Git 世界中到底有多重要。
如果你還不知道 Git 是什麼,歡迎先去看看我的第一篇 Git 系列文章:
Git 入門:版本控制與 Git 是什麼?【用 Git 打造你的程式時光機 & 平行宇宙】
Git 的三個區域
先回顧 Git 的三個區域:
- Working Directory (工作目錄):編輯檔案的地方
- Staging Area (暫存區):存放「準備被記錄的檔案」的地方
- Repository (儲存庫):存放「被 Git 保存為正式歷史紀錄的版本」的地方
Git 在進行資料處理時,都是基於這三個區域。
Commit 介紹
commit 不是「存檔」,而是「建立一個時間點」
很多人會把 commit 想成是
把修改存起來 (這是錯的!)
但準確的說法是:
commit 是建立一個專案的「快照(snapshot)」。
當執行:
git commit -m "新增登入功能"
Git 做的事情是把「暫存區」裡的內容拍成一張完整的快照,存進版本歷史。這張快照代表著「這個專案此時的樣子」。
(有點像古早味單機遊戲的存檔點?)
Git 的儲存機制
Git 跟很多傳統版本控制工具(像是 Subversion) 最大的不同就是,Git 每次 commit 都儲存整個專案在那個時間點的「完整快照」,而不是只記「這次改了什麼差異」
你可以把 commit 想像成:
版本1:專案有 A B C // 拍下完整照片 1
版本2:專案新增 D // 拍下完整照片 2,裡面有 A、B、C、D
版本3:把 C 改成 E // 拍下完整照片 3,裡面有 A、B、D、E
每一次 commit 都是完整的狀態記錄。雖然每張照片看起來都是完整的,但如果某個檔案內容完全沒變,Git 不會存一份一樣的檔案,而是指向之前存過的那份。所以儲存空間才不會爆炸,操作速度也很快。
commit hash
每一次 commit 都會產生一個 commit hash,這是獨一無二的編號,用來標示這個時間點的專案,類似版本的身分證。
例如:
a3f5e92...
透過 commit hash,你可以:
- 用它回到某個版本
- 查看那次做了什麼修改
- 比較不同版本差異
這也是為什麼 Git 可以當作「程式時光機」!!!
Commit 的特性
每一筆 commit 都會記住他的前一個 commit,被串接起來的 commit 鏈就形成了專案的歷史紀錄。
看起來像是這樣:
(舊) (新)
A ⭠ B ⭠ C ⭠ D // 每個 commit 指向前一筆 commit
commit 不可變
一個 commit 除了檔案內容外,還包含了作者、時間、前一筆 commit ID 等相關資料,因此一旦 commit 完成,它就不會被修改。
如果你改檔案再 commit,Git 不會修改舊的 commit,而是建立一個新的 commit。
commit 內容永遠來自暫存區
有些新手寶寶會下意識改完檔案就想 commit,但是請等一等! commit 前一定要先將變更丟到站存庫呀~
正確流程:
修改工作目錄的檔案 → git add → 暫存區 → git commit → 儲存庫commit 只會處理暫存區的內容。
總結
總結來說,Git Commit 不只是簡單的存檔,它是專案在特定時空的「快照」。透過獨一無二的 Hash ID 與不可變的特性,確保程式碼歷史的真實性與穩定性。
了解 commit 的概念是學會 Git 版控最關鍵的一步,因為不論分支(branch)、合併(merge),還是版本回溯(checkout、reset),本質上都是在操作 commit 之間的關係。
在下一篇文章中,我們將正式進入 Git 分支(branch) 的世界,看看 Git 是如何透過 commit 鏈建立「平行宇宙」,讓多人協作與功能開發變得安全又高效!





















