這一課完成後:你的 norelyn-first-project 會成為一個 Git repository,而且至少會有兩個 commit。你會理解 working tree、staging area、commit 之間的關係。
先確認 Git 真的可以用
在 VS Code 打開 norelyn-first-project,再開 Terminal:
git --version
如果能看到版本號,就可以繼續。如果找不到 git,先回到 環境設定,不要先往下硬做。
Git 跟 GitHub 不是同一件事
這一課甚至不需要 GitHub 帳號。Git 是跑在你電腦上的版本控制工具;GitHub 是之後可以存放 Git repository、協作和分享程式碼的線上服務。
GitHub = 線上託管與協作服務
所以第一個版本,先完全留在自己的電腦上。
先做:把這個資料夾變成 repository
先用 pwd 或目前的提示符號確認 Terminal 位於 norelyn-first-project 根目錄,然後輸入:
git init
Git 會在這個專案裡建立自己的版本控制資料。你可能在一般檔案瀏覽器看不到,因為它放在隱藏的 .git 資料夾裡。
不要手動編輯 .git。知道它存在就夠。只要這個資料夾還在,Git 就知道這是一個 repository,也保存著版本歷史和設定。
先問 Git:現在發生了什麼?
git status
這是現在最值得養成習慣的一條指令。它不會修改專案,只會告訴你目前有哪些檔案還沒被追蹤、哪些檔案改過、哪些改動已經準備好進入下一個 commit。
第一次執行時,你很可能會看到一堆 untracked files。意思不是出錯,而是:「這些檔案存在,但 Git 還沒有開始記錄它們。」
Git 不會看到檔案就自動替你存版本
這是 Git 最重要的觀念之一。你修改一個檔案,不代表它自動成為新版本。Git 中間有一層叫 staging area。
Working tree 是你現在實際正在改的檔案;staging area 是「下一個 commit 準備包含哪些改動」;commit 才是正式寫進歷史的一個版本節點。
把目前的專案放進 staging area
現在這個練習專案內容很單純,所以可以輸入:
git add .
這裡的 . 代表目前資料夾。也就是把目前專案內的變更加入 staging area。
再執行:
git status
你應該會看到狀態改變,檔案變成準備被 commit 的狀態。
不要把 git add . 理解成「永遠全部加進去」。它只是這次練習方便。真正的專案裡,你應該先用 git status 確認有哪些改動,再決定要 stage 哪一些。
第一次 commit 之前,Git 需要知道作者是誰
如果這台電腦從來沒有設定過 Git 身分,第一次 commit 可能會要求 user.name 和 user.email。
可以設定:
git config --global user.name "你的名字"
git config --global user.email "你的電子郵件"
這是在 commit metadata 裡標記作者,不是登入 GitHub,也不是把密碼存在 Git。請填你願意出現在版本紀錄裡的名稱與信箱。
如果之後公開推到 GitHub,而且你不想讓私人信箱顯示,可以在 GitHub 課程再處理 noreply email。現在先理解用途即可。
做出第一個版本
git commit -m "Create first project structure"
-m 後面是這次 commit 的訊息。它應該描述「這一版做了什麼」,而不是寫 update、123 或 final-final。
成功後再輸入:
git status
如果沒有新的修改,通常會看到 working tree clean。也就是目前硬碟上的內容和最新 commit 沒有未記錄的差異。
現在故意做一個改動
打開 README.md,加上一行:
# Norelyn First Project
My first project with Git.
儲存後執行:
git status
Git 應該會告訴你 README.md 被修改了。注意:第一個 commit 沒有消失;你只是站在那個版本之後,又產生了尚未被記錄的新變化。
看看你到底改了什麼
git diff
git diff 會顯示 working tree 相對於目前版本的未 staged 差異。第一次看到 diff 可能有點像雜訊,但先抓最基本的:
+ 通常代表新增的內容
你不需要現在讀懂 diff 格式的所有資訊,只要開始建立「commit 前先看一下自己到底改了什麼」的習慣。
建立第二個 commit
git add README.md
git commit -m "Add project description"
這次沒有使用 git add .,而是明確只把 README.md 加入 staging area。這更接近之後真實工作的方式。
你的歷史現在已經有兩個節點
輸入:
git log --oneline
你應該會看到兩筆紀錄,每一筆前面都有一小段 commit ID,後面是訊息。
↑
commit 1 · Create first project structure
這就是 Git 真正開始有價值的地方:不是「幫你備份一個資料夾」,而是建立一串有身份、有時間、有內容差異的版本歷史。
Commit 不是「存檔」的另一個名字
在 VS Code 按 Ctrl + S,只是把目前內容寫回硬碟;Git commit 則是從目前專案的狀態中,建立一個可以辨識的版本節點。
Commit → 記錄一個版本
所以正常流程可能是:一天存檔幾十次,但只建立幾個有意義的 commits。
那什麼時候該 commit?
沒有唯一規則,但對初學者來說,一個好基準是:完成一個可以清楚說明的小改動時,就建立一個 commit。
例如「新增首頁標題」、「修正登入驗證」、「加入 README」都比「今天寫了三小時」更適合作為 commit 的範圍。
小挑戰:自己做第三個版本
需求 1:在 docs 裡建立 progress.txt。
需求 2:寫下你目前完成到 Start Here 第幾課。
需求 3:用 git status 確認它是新檔案。
需求 4:只 stage 這一個檔案。
需求 5:建立一個你自己命名的 commit。
需求 6:最後用 git log --oneline 確認歷史至少有三筆。
你剛剛真正學會了什麼?
Git 的核心不是一串神秘指令,而是一個版本流程:
你已經會 init、status、add、commit、diff 和 log。現在先停在這裡,不急著學 branch、merge、rebase。
下一課才會把這個已經存在於本機的 repository 放到 GitHub。到那時候,push 的意思會非常清楚:不是「把資料夾上傳」,而是把 Git 的版本歷史同步到遠端 repository。
完成條件:你的專案已經執行過 git init,而且 git log --oneline 至少能看到兩個你自己建立的 commits。