Git 入門:為什麼要先 git add 再 commit?【你的程式時光機】

更新 發佈閱讀 8 分鐘

在上一篇文章中,我們學會了版本控制並建立了第一個版本節點,也提到了 Git 處理檔案的三個區域,但是對於其中細節並沒有特別解釋。這篇文章將會探索 commit 與三個區域到底是什麼,以及檔案在這三個區域中的狀態,還有這些狀態代表著什麼。

如果你還不知道 Git 是什麼,歡迎先去看看我的第一篇 Git 系列文章:

Git 入門:版本控制與 Git 是什麼?【用 Git 打造你的程式時光機 & 平行宇宙】

Git 的三個區域​

前一篇文章我們稍微提到了這個概念,今天我們就來深入探究一下這三個區域是什麼。

在 Git 中,資料處理是基於三個區域:工作目錄、暫存區、儲存庫。

工作目錄 Working Directory

這是我們實際看到、編輯檔案的地方。當你開啟檔案資料夾、用編譯器編輯程式碼、新增刪除檔案,這些行為都發生在工作目錄。

📌 重點:Git 會看見「已追蹤」檔案的變化,但不會自動幫你儲存進版本歷史。

暫存區 Staging area/ Index

暫存區有時也會被稱作索引。可以把暫存區想像成是一個「準備清單」。使用 git add 告訴 Git 「我想把這個變更後的檔案存到歷史紀錄」,資料就會被放到這個區域,等待被存成一個歷史節點。

📌 重點:如同這個區域的名字,檔案被添加到這個區域,還沒有正式存成歷史紀錄。

儲存庫 Repository:

儲存庫是真正存放「版本歷史」的地方。執行 git commit -m"變更訊息" 後,暫存區的內容就會被存成一張「快照 snapshot」,未來透過這個紀錄,我們可以將檔案回復到這個時期的樣子。

📌 重點:儲存庫保存的是「暫存區」內容,如果你變更了檔案卻沒有用 git add 保存,git commit 就無法幫你記錄這個變更的版本唷!

Git 中的檔案狀態

其實 Git 不只在意檔案存在的「區域」,也會追蹤檔案的狀態。文章前面有提到,Git 會注意到「已追蹤」檔案的變化,那麼已追蹤是什麼意思? 在 Git 的世界,檔案分成未追蹤已追蹤

  • 未追蹤 Untracked: 新建立、從未經過 git add 的檔案。
  • 已追蹤 Tracked: 已經被 Git 納入版本控制,也就是 git add 過的檔案。已追蹤的檔案又可以分為已修改 Modified已刪除 Deleted

在 git status 指令中,除了可以看到檔案的狀態外,也常常會出現三種狀態訊息

  1. Changes to be committed
  2. Nothing to commit, working tree clean
  3. Changes not staged for commit

下面的範例會一起說明檔案狀態與狀態訊息~


檔案狀態 - Untracked

當資料夾執行 git init 後,資料夾內未被加入版控的檔案都會是「未追蹤」狀態。可以透過 git add file 開始追蹤,只要經過 git add,之後這個檔案的變更都可以被 git 發現~

當資料夾 git init 初始化過後,用 git status 就可以查看狀態,從下圖可以看到,此時資料夾內的檔案會歸類在 Untracked files,並用紅色字標記:

Untracked files

Untracked files


狀態訊息 - Changes to be committed

透過 git add file 追蹤並將檔案加到暫存區,這時 git 已經可以開始追蹤檔案的變更了。可以看到此時檔案會被歸類在 Changes to be committed,並用綠色字標記 new file

Changes to be committed

Changes to be committed


狀態訊息 - Nothing to commit, working tree clean

當我們使用 git commit -m"訊息" 將暫存區內容保存為歷史紀錄後,檔案的狀態會顯示 nothing to commit, working tree clean,這代表工作目錄、暫存區的內容與最新一次 commit 的內容一樣,沒有變更:

raw-image

狀態訊息 - Changes not staged for commit 與檔案狀態 - Modified

現在我們隨便編輯一下檔案,因為 git 已經追蹤了這個檔案,所以它可以知道你的檔案都經歷了些什麼。重新用 git status 查看狀態,Git 會告訴你「Changes not staged for commit」,並且檔案變成紅字標記的 modified,意思是有一個變更的檔案,但是這個變更尚未存到暫存區。

raw-image

接著再 git add 檔案一次,檔案又會回到 changes to be committed 的狀態:

raw-image

將暫存區內容保存到儲存庫:

raw-image

狀態訊息 - Changes not staged for commit 與檔案狀態 - Deleted

如果這時,我刪掉了檔案呢? 刪掉檔案後再一次 git status,可以看到 git 一樣會顯示 changes not staged for commit,並且下方的紅字會顯示 deleted

raw-image

同樣用 git add 將這個檔案的變化存到暫存區,重新查看狀態,變成了 changes to be committed:

raw-image

git commit 將變更保存為歷史節點:

raw-image

Git 為什麼要分成三個區域

所以 Git 為何要分成三個區域管理檔案? 這是為了讓版本控制的內容更精細可控。如果工作目錄直接對應到儲存庫、每一個小變動都自動存成一個版本,可能會導致一大堆未完成、充滿 bug 的程式都被記錄下來。因此,我會把 Git 分成三個區域的好處歸納為以下幾點:

  • 精準過濾:開發過程中可能會產生一大堆臨時檔案或測試變更,這些東西未必需要被存起來,在版本控制時可以精準挑出要存的檔案加入暫存區,即使加錯了也可以再移出。
  • 原子提交:你可能同時改了 A、B、C 三個功能,透過暫存區,可以輪流 git add、commit,並且為不同的功能寫它們對應的 commit 訊息,避免一大包混雜的變更。
  • 安全試錯:開發時你可能會想嘗試各種亂七八糟的東西、改壞程式碼等,只要這些動作停在工作目錄或暫存區,就不會汙染歷史,可以放心大膽的事!!

總結

到這裡我們已經把 Git 處理檔案的三個核心區域走過好幾遍了,讓我們快速回顧一下重點:

  • 在工作目錄的檔案分成:
  1. 未追蹤,需要透過 git add 加入
  2. 已追蹤:曾經歷過 git add 的檔案,又分為 modified 與 deleted。
  • Git 中,變更後的檔案要利用 git add 添加到暫存區, git commit 也只會對暫存區的內容作用。
  • Git 三個操作區域讓版本控制更安全、精準、細緻。

下一篇文章,我們將進入分支的世界!!


留言
avatar-img
Elaine 粼粼的林林總總
6會員
17內容數
不定期地分享程式/旅遊/學習/閱讀或各式各樣的文章,如果對我的分享有興趣,歡迎來找我玩~
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 提供的操作介面。
2026/01/25
程式開發者必學!透過有趣的故事和比喻,帶你輕鬆理解版本控制系統(中央式vs分散式)、Git 是什麼,以及 Git、GitHub、GitLab 的不同。文章還包含實際案例,幫助你掌握 Git 的入門用法,為未來深入學習打下基礎。
Thumbnail
2026/01/25
程式開發者必學!透過有趣的故事和比喻,帶你輕鬆理解版本控制系統(中央式vs分散式)、Git 是什麼,以及 Git、GitHub、GitLab 的不同。文章還包含實際案例,幫助你掌握 Git 的入門用法,為未來深入學習打下基礎。
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
這篇文章介紹了git常用的幾個指令,包括分支合併、重製修改、修改紀錄等。另外也提到了一個好用的小工具tig。這些指令的使用方法和技巧都有詳細介紹,可以幫助讀者更好地使用git。
Thumbnail
這篇文章介紹了git常用的幾個指令,包括分支合併、重製修改、修改紀錄等。另外也提到了一個好用的小工具tig。這些指令的使用方法和技巧都有詳細介紹,可以幫助讀者更好地使用git。
Thumbnail
這篇文章介紹了基礎的 Git 指令,對於懂得使用 Git 的開發人員來說,這些指令都是非常重要且實用的。文章詳細說明瞭每個指令的功能以及如何運用,對於想要更加熟悉 Git 指令的開發人員來說,這是一篇非常實用的文章。
Thumbnail
這篇文章介紹了基礎的 Git 指令,對於懂得使用 Git 的開發人員來說,這些指令都是非常重要且實用的。文章詳細說明瞭每個指令的功能以及如何運用,對於想要更加熟悉 Git 指令的開發人員來說,這是一篇非常實用的文章。
Thumbnail
這篇文章將介紹工程師使用版控和git的相關知識和技能,包括版本控制的意義和git的基本指令,以及開發流程和webhook的概念。
Thumbnail
這篇文章將介紹工程師使用版控和git的相關知識和技能,包括版本控制的意義和git的基本指令,以及開發流程和webhook的概念。
Thumbnail
最近在找資料的時候,偶然發現了兩個有趣的 git 指令:git commit --fixup 和 git rebase -i <sha> --autosquash。 研究了下發現對於像我這種每次 commit 都要斤斤計較,盡可能完美的人來說非常好用,因此寫一篇筆記記錄一下用法。
Thumbnail
最近在找資料的時候,偶然發現了兩個有趣的 git 指令:git commit --fixup 和 git rebase -i <sha> --autosquash。 研究了下發現對於像我這種每次 commit 都要斤斤計較,盡可能完美的人來說非常好用,因此寫一篇筆記記錄一下用法。
Thumbnail
這篇文章將會介紹分支的合併,以及它常見的分類。
Thumbnail
這篇文章將會介紹分支的合併,以及它常見的分類。
Thumbnail
前言   這篇文章將會以 SourceTree 作為媒介,講述 Git 中關於伺服器資料儲存狀態的介紹,並介紹如何建立分支與應用。 資料上傳 | Data Commit   版本控制最簡單的介紹,其實就是把專案的資料上傳雲端,然後進行不同版本的分類,當有需要抓回某一個功能進行展演或比對時,可以從這雲
Thumbnail
前言   這篇文章將會以 SourceTree 作為媒介,講述 Git 中關於伺服器資料儲存狀態的介紹,並介紹如何建立分支與應用。 資料上傳 | Data Commit   版本控制最簡單的介紹,其實就是把專案的資料上傳雲端,然後進行不同版本的分類,當有需要抓回某一個功能進行展演或比對時,可以從這雲
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News