Git 入門:Git 裡的 commit 是什麼?【你的程式時光機】

更新 發佈閱讀 5 分鐘

前一篇文章中,我們學會了版本控制、建立了第一個版本節點,但對於其中細節並沒有特別解釋,你可能也會很想知道:「所以,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 鏈就形成了專案的歷史紀錄。

看起來像是這樣:

()       ()
ABCD // 每個 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 鏈建立「平行宇宙」,讓多人協作與功能開發變得安全又高效!

留言
avatar-img
Elaine 粼粼的林林總總
7會員
34內容數
不定期地分享程式/旅遊/學習/閱讀或各式各樣的文章,如果對我的分享有興趣,歡迎來找我玩~
2026/01/31
這篇文章將會探討 Git 的工作目錄、暫存區和儲存庫三大區域,並解釋檔案在這三個區域中的狀態(未追蹤、已追蹤、已修改、已刪除),以及 git status 指令中常見的訊息。透過理解這三大區域的運作原理,可以幫助開發者更精準、安全地進行版本控制。
2026/01/31
這篇文章將會探討 Git 的工作目錄、暫存區和儲存庫三大區域,並解釋檔案在這三個區域中的狀態(未追蹤、已追蹤、已修改、已刪除),以及 git status 指令中常見的訊息。透過理解這三大區域的運作原理,可以幫助開發者更精準、安全地進行版本控制。
2026/01/28
上一篇文章中,我們已經成功安裝好 Git,在本篇文章中,將會講解 Git 的核心操作,包括初始化儲存庫、查看檔案狀態、添加變更到暫存區,以及保存版本。文章中也簡單提及了 Git 的三個核心區域:工作目錄、暫存區和儲存庫,並解釋了 .gitignore 的用途。
Thumbnail
2026/01/28
上一篇文章中,我們已經成功安裝好 Git,在本篇文章中,將會講解 Git 的核心操作,包括初始化儲存庫、查看檔案狀態、添加變更到暫存區,以及保存版本。文章中也簡單提及了 Git 的三個核心區域:工作目錄、暫存區和儲存庫,並解釋了 .gitignore 的用途。
Thumbnail
2026/01/26
在上一篇文章中,我們已經對於 Git 是什麼、能做什麼有初步的了解了,接下來,可以正式啟航 Git 這架時光機啦! 在這篇文章中,我會帶著大家一起安裝 Git~以及簡單介紹 Git 提供的操作介面。
2026/01/26
在上一篇文章中,我們已經對於 Git 是什麼、能做什麼有初步的了解了,接下來,可以正式啟航 Git 這架時光機啦! 在這篇文章中,我會帶著大家一起安裝 Git~以及簡單介紹 Git 提供的操作介面。
看更多
你可能也想看
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
步驟 一般在 git 預設 commit 訊息編輯器會是 vim ,但是如果不習慣使用 vim 命令列,且有安裝 visual studio code 的環境下,可以使用以下命令將 commit 訊息編輯器改為 visual studio code : git config --global c
Thumbnail
步驟 一般在 git 預設 commit 訊息編輯器會是 vim ,但是如果不習慣使用 vim 命令列,且有安裝 visual studio code 的環境下,可以使用以下命令將 commit 訊息編輯器改為 visual studio code : git config --global c
Thumbnail
此教學文章提供逐步指南,說明如何在 GitHub 上創建儲存庫,並使用 Git 進行版本控制,包含單人操作和多人協作,以及分支建立、切換和合併等實例。搭配圖文說明,讓您輕鬆上手 Git 版本控制系統。
Thumbnail
此教學文章提供逐步指南,說明如何在 GitHub 上創建儲存庫,並使用 Git 進行版本控制,包含單人操作和多人協作,以及分支建立、切換和合併等實例。搭配圖文說明,讓您輕鬆上手 Git 版本控制系統。
Thumbnail
最近在找資料的時候,偶然發現了兩個有趣的 git 指令:git commit --fixup 和 git rebase -i <sha> --autosquash。 研究了下發現對於像我這種每次 commit 都要斤斤計較,盡可能完美的人來說非常好用,因此寫一篇筆記記錄一下用法。
Thumbnail
最近在找資料的時候,偶然發現了兩個有趣的 git 指令:git commit --fixup 和 git rebase -i <sha> --autosquash。 研究了下發現對於像我這種每次 commit 都要斤斤計較,盡可能完美的人來說非常好用,因此寫一篇筆記記錄一下用法。
Thumbnail
我們在「【開發智能合約 — Solidity系列】開發環境準備」這一個篇章有教學如何結合Remix與Github來儲存我們的程式碼,使用Remix Editor一段時間後,也順利提交Souce Code到Github,但過程中發現一個小問題,就是在Github上的歷程中發現每一次的提交作者都是「Re
Thumbnail
我們在「【開發智能合約 — Solidity系列】開發環境準備」這一個篇章有教學如何結合Remix與Github來儲存我們的程式碼,使用Remix Editor一段時間後,也順利提交Souce Code到Github,但過程中發現一個小問題,就是在Github上的歷程中發現每一次的提交作者都是「Re
Thumbnail
這篇文章將會介紹分支的合併,以及它常見的分類。
Thumbnail
這篇文章將會介紹分支的合併,以及它常見的分類。
Thumbnail
前言   這篇文章將會以 SourceTree 作為媒介,講述 Git 中關於伺服器資料儲存狀態的介紹,並介紹如何建立分支與應用。 資料上傳 | Data Commit   版本控制最簡單的介紹,其實就是把專案的資料上傳雲端,然後進行不同版本的分類,當有需要抓回某一個功能進行展演或比對時,可以從這雲
Thumbnail
前言   這篇文章將會以 SourceTree 作為媒介,講述 Git 中關於伺服器資料儲存狀態的介紹,並介紹如何建立分支與應用。 資料上傳 | Data Commit   版本控制最簡單的介紹,其實就是把專案的資料上傳雲端,然後進行不同版本的分類,當有需要抓回某一個功能進行展演或比對時,可以從這雲
Thumbnail
前言   這篇文章將會介紹伺服器的概覽和倉庫,並介紹兩款客戶端協助使用者。 伺服器 | GitHub   線上軟體原始碼代管服務平台,使用 Git 作為版本控制軟體 GitHub 同時提供付費帳戶和免費帳戶,這兩種帳戶都可以建立公開或私有的代碼倉庫,但付費使用者擁有更多功能。   除了允許個人和組
Thumbnail
前言   這篇文章將會介紹伺服器的概覽和倉庫,並介紹兩款客戶端協助使用者。 伺服器 | GitHub   線上軟體原始碼代管服務平台,使用 Git 作為版本控制軟體 GitHub 同時提供付費帳戶和免費帳戶,這兩種帳戶都可以建立公開或私有的代碼倉庫,但付費使用者擁有更多功能。   除了允許個人和組
Thumbnail
前言   這篇文章將會介紹版本控制,並介紹相關的伺服器和客戶端,藉由比較易懂的方式介紹,可能會跟實際上有些微的落差,但會比較好理解。 版本控制   版本控制基本上是由一個名為 Git 的軟體所建立,隨著時間推進,延伸出了很多伺服器和可視話的客戶端,接下來我會一個一個介紹。 底層 | Git 客戶端
Thumbnail
前言   這篇文章將會介紹版本控制,並介紹相關的伺服器和客戶端,藉由比較易懂的方式介紹,可能會跟實際上有些微的落差,但會比較好理解。 版本控制   版本控制基本上是由一個名為 Git 的軟體所建立,隨著時間推進,延伸出了很多伺服器和可視話的客戶端,接下來我會一個一個介紹。 底層 | Git 客戶端
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News