上一篇 Lesson 026:Python 開始出現很多這種東西:
python app.py
python -m pip install requests
問題是:這些到底要打在哪裡?
答案通常是終端機。
你可以把開發環境想成一間工作室:
- 終端機(Terminal) 是你的工作檯。
- 命令列介面(Command-Line Interface, CLI) 是你用文字操作工具的方式。
- Git 是版本紀錄簿。
- GitHub 是放在網路上的遠端專案倉庫與協作平台。
它們經常一起出現,所以新手很容易把四個東西混成一個。
Terminal 和 CLI 不是 GitHub
Terminal 是一個讓你輸入命令、看到輸出的介面。
例如:
pwd
pwd 常用來查看「我目前在哪個資料夾」。它來自 print working directory。
接著:
cd projects
cd 是 change directory,意思是切換資料夾。
再來:
ls
常用來列出目前資料夾裡有哪些檔案。
在 Windows PowerShell 裡,cd、pwd、ls 也通常可以直接使用;底層對應的是 PowerShell 自己的命令或別名。
所以當 README 寫:
cd my-ai-project
python app.py
它其實只是說:
- 先進入
my-ai-project資料夾。 - 再叫 Python 執行裡面的
app.py。
Git 是什麼?
你改程式時,很容易遇到:
「剛才明明還能跑,我到底改壞了哪裡?」
Git 是分散式版本控制系統(Distributed Version Control System),它可以記錄檔案如何一路改變。
可以把它想成:每完成一個有意義的修改,就拍下一張專案快照,並附上一句說明。
這張快照就是 commit。
Git 本身可以完全在你的電腦上工作;它不等於 GitHub。
GitHub 又是什麼?
GitHub 是可以存放 Git repository、協作、Code Review、Issue、Actions 等功能的平台。
Repository(常縮寫成 repo) 可以先理解成「一個受 Git 管理的專案資料夾與它的版本歷史」。
所以:
Git = 版本控制工具。
GitHub = 一個常用來存放與協作 Git repository 的線上服務。
clone:第一次把遠端專案整份拿下來
假設 GitHub 上有一個專案:
git clone https://github.com/example/my-ai-project.git
這行的作用是:
把遠端 repository 複製成一份本機 repository。
clone 不只是下載目前檔案,也會帶下 Git 需要的版本資訊。
通常一個專案只需要 clone 一次。之後要拿更新,不是每天重新 clone,而是用 pull 或其他 Git 同步方式。
status:先看現在到底改了什麼
我很推薦新手養成一個習慣:
git status
它不會把你的程式送出去,也不會修改檔案。
它只是告訴你目前 Git 看到的狀態,例如:
- 哪些檔案被修改
- 哪些是新檔案
- 哪些已經準備進下一個 commit
- 目前在哪個 branch
所以不知道下一步該不該 pull、commit、push 時,先 git status 通常很有幫助。
pull:把遠端最新修改拿回來
常見命令:
git pull
直覺上可以理解成:
「把遠端 repository 的新變化取回來,並嘗試整合進我現在的本機分支。」
在常見設定下,git pull 會涉及先取得遠端更新,再把它整合到目前工作線。
所以多人一起改專案時,工作前常會先 pull,避免自己建立在很舊的版本上。
但注意:如果你本機已經有互相衝突的修改,pull 可能產生 merge conflict(合併衝突),這時需要人工決定哪一版才是正確內容。
add:挑出這次準備記錄的變更
假設你改了:
app.py
README.md
可以:
git add app.py README.md
git add 的作用不是上傳 GitHub,而是把這些變更放進暫存區(Staging Area),告訴 Git:
「下一次 commit,我打算包含這些修改。」
你也常看到:
git add .
. 代表目前目錄,因此通常會把目前範圍內的多個變更加入暫存區。
這很方便,但新手不要無腦使用。先 git status 看清楚,避免把密碼、巨大的資料檔或不該提交的東西一起加進去。
commit:在本機留下有名字的版本紀錄
git commit -m "Add local model example"
拆開看:
git commit:建立一筆版本紀錄。-m:後面直接附 commit message。"Add local model example":這次修改的簡短說明。
執行成功後,這個 commit 先存在你的本機 Git 歷史裡。
commit 也不等於已經上 GitHub。
這是最常見的誤解之一。
push:把本機的新 commit 送到遠端
git push
它的作用才是把你本機已經建立好的 commit 推送到設定的遠端 repository。
所以可以把流程記成:
修改檔案
↓
git status
↓
git add
↓
git commit
↓
git push
其中:
- 修改檔案:真的改內容。
status:檢查狀態。add:挑這次要記錄的修改。commit:建立本機版本紀錄。push:把 commit 送到遠端。
pull 和 push 到底差在哪?
最簡單的方向感:
GitHub / 遠端
↓ pull
你的電腦
↑ push
pull 是把遠端變化往自己這邊同步。
push 是把自己已經 commit 的變化送往遠端。
它們不是「下載檔案」與「上傳檔案」這麼單純,因為 Git 在同步的是版本歷史與分支關係,但這個方向感很適合先建立直覺。
一個比較完整、也比較安全的日常流程
git status
git pull
git status
# 修改並測試程式
git diff
git add app.py
git commit -m "Explain model loading"
git push
逐行解釋:
- 第一個
git status:確認開始前工作目錄是不是乾淨的。 git pull:拿遠端最新版本。- 第二個
git status:確認同步後狀態。 - 中間修改並測試:真的做工作。
git diff:查看你到底改了哪些文字。git add app.py:只把這次想提交的檔案放進暫存區。git commit ...:建立本機版本紀錄。git push:把這筆 commit 送到遠端。
這比「改完直接 git add . && git push」更容易看清楚發生什麼。
branch 是什麼?
分支(Branch) 可以先想成同一份專案歷史裡的一條工作線。
main 常被拿來當主要工作線,但專案也可能建立其他 branch 開發功能,再經過 review 合回 main。
之後看到:
git switch main
意思就是切換到名為 main 的 branch。
如果你目前只是在跟著自己的教學專案走,先把 main、status、pull、commit、push 搞懂就已經很夠用了。
為什麼 Coding Agent 更需要你懂 Git?
後面會介紹 Cursor、Codex 這類 Coding Agent。
它們可以讀檔案、修改多個檔案,甚至執行測試。
正因為改動速度變快,你更需要 Git 幫你回答:
- Agent 改了哪些檔?
- 哪幾行被刪掉?
- 這次修改能不能回復?
- 我要不要把它 push 上去?
AI 可以幫你寫 code,但版本控制仍然是你檢查與掌握改動的重要安全網。
不要把 API Key push 上 GitHub
之後你會接觸 OpenAI、Gemini、Grok 等 API。
API Key 可以先理解成讓服務辨識與授權你的祕密憑證。
不要把這種祕密直接寫進程式再 push 到公開 repository。
常見做法是使用環境變數與 .env,並把不該提交的檔案放進 .gitignore。
這一點後面介紹模型服務商時會再接回來。
一句話帶走
Terminal / CLI 是你用文字操作電腦的工作檯;Git 負責記錄版本,GitHub 負責遠端存放與協作;pull 是把遠端更新拉回來,commit 是本機建立版本紀錄,push 才是把 commit 送往遠端。
留言
有想法、疑問或想補充的地方,都可以留在這裡。
還沒有留言,來當 1F 吧。