Git 基本觀念 (Basic Concepts)
在開始使用 Git 指令之前,先了解 Git 的核心觀念,會讓你更容易理解每個指令在做什麼。
Repository(儲存庫)
Repository(簡稱 repo)是 Git 用來儲存專案所有檔案和歷史紀錄的地方。
- Local Repository:在你電腦上的儲存庫
- Remote Repository:在遠端伺服器(如 GitHub)上的儲存庫
當你在專案資料夾執行 git init,Git 會建立一個隱藏的 .git 資料夾,這就是你的 local repository。
Git 的三個區域
Git 把檔案分成三個區域來管理:
Working Directory → Staging Area → Repository
(工作目錄) (暫存區) (儲存庫)
Working Directory(工作目錄)
就是你專案的資料夾,你在這裡新增、修改、刪除檔案。這些變更 Git 都會偵測到,但還沒被追蹤。
Staging Area(暫存區)
又叫 Index,是準備要 commit 的檔案暫存的地方。
使用 git add 把檔案從 Working Directory 加到 Staging Area。
Repository(儲存庫)
儲存所有 commit 紀錄的地方。
使用 git commit 把 Staging Area 的檔案存到 Repository。
檔案的四種狀態
在 Git 中,檔案可能處於以下四種狀態:
- Untracked(未追蹤):新建立的檔案,Git 還不知道它的存在
- Unmodified(未修改):已經在 Git 追蹤中,但沒有被修改
- Modified(已修改):檔案被修改了,但還沒加到暫存區
- Staged(已暫存):檔案被加到暫存區,準備要 commit
Untracked → (git add) → Staged → (git commit) → Unmodified
↓
(編輯檔案)
↓
Modified
↓
(git add)
↓
Staged
Commit(提交)
Commit 是 Git 的核心概念,代表一次「存檔」,記錄了:
- 這次修改了哪些檔案
- 修改的內容
- 誰做的修改
- 什麼時候修改的
- Commit message(提交訊息)
每個 commit 都有一個唯一的 SHA-1 hash(40 個字元),例如:
a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0
通常只需要前 7 個字元就能識別一個 commit:a1b2c3d
Branch(分支)
Branch 讓你可以在不影響主要程式碼的情況下開發新功能。
你可以把 branch 想像成一條時間線,每個 commit 是時間線上的一個點:
main: A --- B --- C
\
feature: D --- E
main分支有 A、B、C 三個 commitfeature分支從 C 分出去,有 D、E 兩個 commit
HEAD
HEAD 是一個指標,指向你目前所在的位置(通常是某個分支的最新 commit)。
當你切換分支或 checkout 到某個 commit 時,HEAD 就會跟著移動。
# 查看 HEAD 指向哪裡
cat .git/HEAD
# 輸出:ref: refs/heads/main
基本工作流程
一個典型的 Git 工作流程:
1. 修改檔案(Working Directory)
↓
2. git add(加到 Staging Area)
↓
3. git commit(存到 Repository)
↓
4. git push(推送到 Remote Repository)
這個流程會不斷重複,每完成一個小功能或修復一個 bug 就 commit 一次。
實際範例
讓我們用一個簡單的例子來說明:
# 1. 建立新專案
mkdir my-project
cd my-project
git init
# 2. 建立檔案(此時檔案是 Untracked)
echo "Hello Git" > hello.txt
# 3. 查看狀態
git status
# 顯示 hello.txt 是 Untracked
# 4. 加到暫存區(變成 Staged)
git add hello.txt
# 5. 再次查看狀態
git status
# 顯示 hello.txt 準備要被 commit
# 6. 提交(存到 Repository,變成 Unmodified)
git commit -m "Add hello.txt"
# 7. 修改檔案(變成 Modified)
echo "Hello World" >> hello.txt
# 8. 查看狀態
git status
# 顯示 hello.txt 被修改了
# 9. 加到暫存區並提交
git add hello.txt
git commit -m "Update hello.txt"
理解了這些基本觀念後,接下來學習各個 Git 指令就會更加得心應手。