【Git 入門教學】#03 基本操作:init、add、commit、status

測驗:Git 基本操作

共 5 題,點選答案後會立即顯示結果

1. 執行 git init 之後,會在目錄中產生什麼?

  • A. 一個名為 git 的檔案
  • B. 一個名為 .git 的隱藏資料夾
  • C. 一個名為 README.md 的檔案
  • D. 一個名為 .gitignore 的檔案

2. 當你看到 git status 輸出中有 “Untracked files” 區塊,這表示什麼?

  • A. 這些檔案已經被刪除了
  • B. 這些檔案已經準備好要提交了
  • C. 這些檔案 Git 還不知道它們存在
  • D. 這些檔案有衝突需要解決

3. git add . 這個指令的作用是什麼?

  • A. 只把目前這個檔案加入暫存區
  • B. 把目前資料夾下所有變更都加入暫存區
  • C. 直接提交目前資料夾的所有變更
  • D. 建立一個新的分支

4. 以下哪個是良好的 commit message 寫法?

  • A. update
  • B. fix bug
  • C. changes
  • D. 新增使用者登入功能

5. 如果想要查看檔案具體改了哪些內容(新增或刪除了哪些行),應該使用哪個指令?

  • A. git status
  • B. git log
  • C. git diff
  • D. git add

一句話說明

學會 init、add、commit、status 這四個指令,你就能開始用 Git 管理專案了。

為什麼需要知道這些

當你讓 AI 幫你寫程式,AI 常常會在回覆中提到:

「先 git init 初始化專案」
「把檔案 git add 到暫存區」
「記得 git commit 保存你的變更」

如果看不懂這些指令在幹嘛,你可能會:

  • 不知道專案有沒有被 Git 追蹤
  • 改了檔案但不知道怎麼保存版本
  • 搞不清楚哪些檔案要加入版本控制

這篇教你看懂這些基本操作。


git init:建立儲存庫

最小範例

git init

這在幹嘛

在目前的目錄建立一個新的 Git 儲存庫。執行後會產生一個 .git 隱藏資料夾,這個資料夾裡面存放了所有版本控制的資訊。

逐行翻譯

git init  # 「在這個資料夾開始用 Git 管理」
Code language: PHP (php)

執行後你會看到:

Initialized empty Git repository in /your/path/.git/
Code language: PHP (php)

翻譯:「已經在這個路徑建立空的 Git 儲存庫」

常見變化

AI 可能會這樣寫:

# 變化 1:建立並進入新專案
mkdir my-project && cd my-project && git init
Code language: PHP (php)

翻譯:「建立 my-project 資料夾,進入它,然後初始化 Git」

# 變化 2:在已存在的專案目錄執行
cd /path/to/existing-project
git init
Code language: PHP (php)

翻譯:「在已經有檔案的專案裡開始用 Git 管理」

Vibe Coder 檢查點

看到 git init 時確認:

  • [ ] 我在正確的資料夾嗎?
  • [ ] 這個專案之前有用過 Git 嗎?(如果有,不需要再 init)

git status:查看目前狀態

最小範例

git status

這在幹嘛

顯示目前工作目錄的狀態:哪些檔案被修改了、哪些準備要提交。這是你最常用的指令,隨時可以執行來確認目前狀況。

逐行翻譯

git status  # 「告訴我現在的狀況」
Code language: PHP (php)

四種檔案狀態

Git 把檔案分成四種狀態:

狀態 英文 意思
未追蹤 Untracked Git 還不知道這個檔案存在
已修改 Modified 檔案改過了,但還沒準備提交
已暫存 Staged 檔案準備好要提交了
已提交 Committed 檔案已經安全保存在版本歷史中

看懂 status 輸出

On branch main

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   index.html

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
        modified:   style.css

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        script.js
Code language: JavaScript (javascript)

翻譯

  • On branch main:你在 main 分支上
  • Changes to be committed:這些檔案準備好要提交了(index.html)
  • Changes not staged for commit:這些檔案改過了但還沒準備提交(style.css)
  • Untracked files:這些檔案 Git 還不知道(script.js)

Vibe Coder 檢查點

看到 git status 輸出時確認:

  • [ ] 我想提交的檔案有出現在 “Changes to be committed” 嗎?
  • [ ] 有沒有不該被 Git 追蹤的檔案?(例如密碼、API key)

git add:加入暫存區

最小範例

git add index.html
Code language: CSS (css)

這在幹嘛

把指定的檔案加入「暫存區」,表示「這個檔案準備好要提交了」。

逐行翻譯

git add index.html  # 「把 index.html 標記為準備提交」
Code language: CSS (css)

常見變化

AI 可能會這樣寫:

# 加入單一檔案
git add index.html
Code language: CSS (css)

翻譯:「只把 index.html 準備好」

# 加入多個檔案
git add index.html style.css script.js
Code language: CSS (css)

翻譯:「把這三個檔案都準備好」

# 加入所有變更的檔案
git add .
Code language: PHP (php)

翻譯:「把目前資料夾下所有變更都準備好」

# 加入特定類型的檔案
git add *.js
Code language: CSS (css)

翻譯:「把所有 .js 檔案準備好」

暫存區是什麼

想像你在整理行李:

  • 工作目錄 = 房間裡散落的物品
  • 暫存區 = 行李箱(放進去的東西準備要帶走)
  • 提交 = 關上行李箱出發

git add 就是「把東西放進行李箱」的動作。

Vibe Coder 檢查點

看到 git add 時確認:

  • [ ] 加入的檔案是我想要的嗎?
  • [ ] git add . 會不會加入不該加的檔案?(建議先用 git status 確認)

git commit:建立提交

最小範例

git commit -m "新增首頁"
Code language: JavaScript (javascript)

這在幹嘛

把暫存區的檔案正式保存到版本歷史中,並附上一段說明訊息。

逐行翻譯

git commit -m "新增首頁"
# git commit = 「保存這個版本」
# -m "新增首頁" = 「說明:新增首頁」
Code language: PHP (php)

執行後你會看到:

[main abc1234] 新增首頁
 1 file changed, 10 insertions(+)
 create mode 100644 index.html
Code language: CSS (css)

翻譯

  • [main abc1234]:在 main 分支建立了一個提交,編號是 abc1234
  • 1 file changed:改了 1 個檔案
  • 10 insertions(+):新增了 10 行

常見變化

# 標準方式:帶訊息的提交
git commit -m "新增登入功能"
Code language: PHP (php)
# 一次加入並提交所有已追蹤的檔案
git commit -am "修正錯字"
Code language: PHP (php)

翻譯-am-a-m 的組合。-a 表示「自動加入所有已追蹤檔案的變更」

注意-a 只會加入「已追蹤」的檔案。如果是全新的檔案(Untracked),還是需要先用 git add 加入。

寫好 commit message 的原則

好的寫法 不好的寫法
新增使用者登入功能 update
修正首頁載入過慢的問題 fix bug
重構 API 呼叫邏輯 changes

原則

  • 寫「做了什麼」,不只是「改了」
  • 一個提交做一件事
  • 用動詞開頭:新增、修正、更新、移除、重構

Vibe Coder 檢查點

看到 git commit 時確認:

  • [ ] 訊息有清楚描述這次改了什麼嗎?
  • [ ] 這次提交只包含相關的變更嗎?

git log:查看提交歷史

最小範例

git log

這在幹嘛

顯示所有的提交歷史,從最新到最舊。

逐行翻譯

git log  # 「給我看看過去做了什麼」
Code language: PHP (php)

輸出範例:

commit abc1234567890abcdef1234567890abcdef12345 (HEAD -> main)
Author: Your Name <you@example.com>
Date:   Mon Jan 20 10:00:00 2025 +0800

    新增首頁

commit def4567890abcdef1234567890abcdef12345678
Author: Your Name <[email protected]>
Date:   Sun Jan 19 15:30:00 2025 +0800

    初始化專案
Code language: CSS (css)

翻譯

  • commit abc123...:這個提交的唯一編號(又稱 commit hash)
  • (HEAD -> main):目前所在位置
  • Author:誰提交的
  • Date:什麼時候提交的
  • 下面的文字:提交訊息

常見變化

# 簡潔版:一行顯示一個提交
git log --oneline
Code language: PHP (php)

輸出:

abc1234 新增首頁
def4567 初始化專案
# 圖形化顯示分支關係
git log --oneline --graph
Code language: PHP (php)

輸出:

* abc1234 新增首頁
* def4567 初始化專案
# 只看最近 5 個提交
git log -5
Code language: PHP (php)
# 組合使用
git log --oneline --graph -10
Code language: PHP (php)

翻譯:「用圖形化的簡潔方式,顯示最近 10 個提交」

Vibe Coder 檢查點

看到 git log 輸出時確認:

  • [ ] 提交訊息有意義嗎?能看出每次做了什麼嗎?
  • [ ] 提交的頻率合理嗎?(太少可能代表一次改太多東西)

git diff:查看變更內容

最小範例

git diff

這在幹嘛

顯示檔案的具體變更內容:加了什麼、刪了什麼。

逐行翻譯

git diff  # 「給我看看改了哪些內容」
Code language: PHP (php)

輸出範例:

diff --git a/index.html b/index.html
index 1234567..89abcde 100644
--- a/index.html
+++ b/index.html
@@ -1,3 +1,4 @@
 <html>
+  <head><title>My Site</title></head>
   <body>
     Hello World
Code language: HTML, XML (xml)

翻譯

  • --- a/index.html:修改前的檔案
  • +++ b/index.html:修改後的檔案
  • - 開頭的行:被刪除的內容(通常顯示為紅色)
  • + 開頭的行:新增的內容(通常顯示為綠色)

常見變化

# 看已暫存的變更(準備要 commit 的內容)
git diff --staged
Code language: PHP (php)

翻譯:「看看準備要提交的內容有什麼」

# 比較兩個提交
git diff abc123 def456
Code language: PHP (php)

翻譯:「看看這兩個版本之間差了什麼」

Vibe Coder 檢查點

看到 git diff 輸出時確認:

  • [ ] 變更的內容是我預期的嗎?
  • [ ] 有沒有不小心改到的地方?

實作練習:完成第一次提交

跟著做一遍,建立你的第一個 Git 專案:

# 1. 建立專案資料夾
mkdir my-first-project
cd my-first-project

# 2. 初始化 Git
git init

# 3. 建立一個檔案
echo "# My First Project" > README.md

# 4. 查看狀態
git status
# 你會看到 README.md 是 Untracked

# 5. 加入暫存區
git add README.md

# 6. 再次查看狀態
git status
# 你會看到 README.md 準備要提交了

# 7. 提交
git commit -m "初始化專案,新增 README"

# 8. 查看歷史
git log --oneline
# 你會看到你的第一個提交
Code language: PHP (php)

常見指令對照表

想做的事 指令
開始用 Git 管理 git init
看現在狀況 git status
準備提交檔案 git add <檔案>
準備提交全部 git add .
正式提交 git commit -m "訊息"
看提交歷史 git log --oneline
看改了什麼 git diff

對 Vibe Coding 的幫助

學會這些基本操作後,你可以:

  • 更精準地下指令:當你要 AI 幫你改程式時,可以說「請幫我修改後,我會用 git diff 確認變更內容」,AI 會知道你希望看到清楚的變更
  • 更有效地 Review AI 產出:用 git status 確認 AI 改了哪些檔案,用 git diff 看具體改了什麼,不滿意就不要 commit
  • 更安全地嘗試:每次 AI 幫你改完,先 commit 一版。如果下次改壞了,你可以用 git log 找回之前的版本

總結

Git 基本操作的核心流程:

1. git init     → 開始追蹤專案
2. (編輯檔案)
3. git status   → 看看改了什麼
4. git add      → 準備要提交的檔案
5. git commit   → 正式保存這個版本
6. git log      → 查看歷史紀錄

記住:status 是你最常用的指令,隨時可以用它確認目前狀態。

進階測驗:Git 基本操作

測驗目標:驗證你是否能在實際情境中應用所學。
共 5 題,包含情境題與錯誤診斷題。

1. 你剛建立了一個新專案資料夾,想要開始用 Git 管理。你應該先執行哪個指令? 情境題

  • A. git status
  • B. git init
  • C. git add .
  • D. git commit -m "初始化"

2. 小明執行了 git commit -m "更新",但出現以下錯誤訊息。最可能的原因是什麼? 錯誤診斷

$ git commit -m “更新” nothing to commit, working tree clean
  • A. commit message 寫得太短了
  • B. Git 沒有正確安裝
  • C. 沒有先用 git add 把檔案加入暫存區
  • D. 需要先執行 git init

3. AI 幫你寫了一段程式碼,你想在提交之前先確認 AI 具體修改了哪些內容。你應該使用哪個指令? 情境題

  • A. git status – 可以看到改了哪些檔案
  • B. git diff – 可以看到具體改了哪些行
  • C. git log – 可以看到修改歷史
  • D. git add . – 先加入再說

4. 你執行 git status 看到以下輸出,接下來要怎麼做才能把 app.js 提交? 情境題

Changes not staged for commit: modified: app.js Untracked files: config.json
  • A. 直接執行 git commit -m "更新 app.js"
  • B. 執行 git add . 然後 git commit(會連 config.json 一起提交)
  • C. 執行 git add app.js 然後 git commit -m "更新 app.js"
  • D. 執行 git init 重新初始化

5. 小明使用 git commit -am "修正錯字",但發現新建立的 test.js 檔案沒有被提交。這是什麼原因? 錯誤診斷

  • A. commit message 有問題
  • B. -a 參數只會加入已追蹤的檔案,新檔案(Untracked)需要先用 git add
  • C. 應該使用 git commit -m 而不是 -am
  • D. test.js 檔案太大無法提交

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *