和 AI 一起寫程式 WEEK 3

上週裝的四樣,
今天全部用上

上週你裝了四樣:GitHub 帳號、Student Pack、ChatGPT 桌面版、Antigravity。今天每一樣都要用——讓 AI 替你裝工具、建倉庫、上線、把面板做成真的 app、弄壞再救回、加你自己的功能。

你負責的六件:看計畫、按同意、自己登入、測試、退回它一次、寫一句理由。

0 今天交什麼

這節做完你會有什麼:知道今天下課前要拿到哪兩行網址、哪一句話。

不交紙、不交檔案。下課前在 e學苑 本週作業的文字框貼三行:

網站:https://你的帳號名.github.io/my-panel/
倉庫:https://github.com/你的帳號名/my-panel
我退回它的那一次:我不要___,因為___。

夠了線=網址活著就是今天 100%。前兩行有了就滿分,第三行是「你退回它那一次」的理由——第 8 段會做到。做不完的人先貼前兩行,第三行回家補。

網站那一行一定要用複製的,不要用手打。repo 名字被用過的人會變成 my-panel-2 之類的,手打一定打錯。

三條路線同分。用 agent 的、用 Codex 的、全程用瀏覽器的,成品長得一樣(網址+倉庫+看得懂的歷史),分數一樣。

Pages 還沒亮的人:先貼倉庫那一行,後面寫一句「Pages 還在等」,亮了再回來補。貼完自己點一次,確認打得開。

1 上週那四樣,今天各做什麼

這節做完你會有什麼:知道自己走哪一條路線,而且知道少了什麼可以補。

上週裝的今天做什麼
GitHub 帳號你作品的倉庫與網址都掛在它下面。今天建的 my-panel 之後每一週都會用到。
Student Developer Pack今天不一定用得到,但它給你瀏覽器裡的雲端電腦(Codespaces)與 Pro;還在審核不影響今天。
ChatGPT 桌面版(裡面的 Codex)路線 A′ 用它。Antigravity 進不去的人走這條,八張卡的提示詞一字不改。
Antigravity路線 A(主線)用它。今天所有指令都由它跑,你負責看計畫、按同意。

對號入座:開場五分鐘自己選

你手上有走用哪個 AI
自己的筆電+Antigravity 登得進+GitHub 帳號路線 A(主線)Antigravity
自己的筆電,但 Antigravity 進不去(未滿 18、用了學校信箱、地區)路線 A′ChatGPT 桌面版切到 Codex。八張卡的提示詞一字不改
沒帶筆電/用教室機/什麼都沒裝路線 Bgithub.com 網頁版+任一 AI 網頁版(ChatGPT/Gemini)
還沒有 GitHub 帳號先辦 10 分鐘,Email 一定填東華信箱(@gms.ndhu.edu.tw,Student Pack 靠它驗你是學生),辦好再回自己那一條
沒有上週那個單檔用起步包的 v0-sample.html 改名 index.html,同分

兩步驟驗證(two-factor authentication,2FA)今天不做。它要手機驗證器 App、還要存復原碼,今天的時間跑不完;在教室公用電腦上做,復原碼會留在那台機器上。回宿舍再做。

現場辦帳號卡住:驗證信沒來→看垃圾信匣、等兩分鐘再按重寄。帳號名被用過→後面加數字。真的辦不成→跟旁邊同學共用他的帳號做完今天全部步驟,在交件那行註明「與某某共用」,同分。

2 先動手五分鐘:練習台

這節做完你會有什麼:親手做出第一筆 commit——不用裝任何東西,教室電腦的瀏覽器就能做。

一坐下就開這個(本週資料夾裡的練習台,用 Chrome 或 Edge):練習台〈從建檔到 commit〉。它把等一下 AI 會替你做的事,縮成一個可以自己按的小畫面。

  1. 新增一個檔案,隨便寫一行字。
  2. 存檔——它現在在工作區。
  3. 按 add——放進暫存區(準備要收進這一版的東西)。
  4. 按 commit,寫一句為什麼——存成一版,進版本庫。
  5. 看歷史:多了一筆。再改一次、再 commit 一次,看它變兩筆。

看什麼:檔案怎麼從「工作區」走到「暫存區」再進「版本庫」。今天卡 4 讓 AI 做的就是這三步;卡 7 的 restore、revert 也是在這三個區之間把東西搬回來。

做完的人幫旁邊還沒做完的;五分鐘到了就抬頭。沒做完沒關係,等一下第 3 節會再講一次。

改寫自老師替經濟系老師做的公開教材〈跟 AI 一起用 Git——不背指令的版本控制〉第一階段(CC BY-NC-SA 4.0,© 陳文盛 × AI 協作團隊)。原站還有完整手冊(觀念與操作、故障排除、自然語言速查)與開始之前,卡住可以查。

3 今天會碰到的工具與觀念

這節做完你會有什麼:今天出現的每個名詞,你都查得到它是什麼、在哪一步用到。

這一節不用背,當字典用——做到哪一步聽不懂,回來查那一列。關鍵詞都是先一句白話,再附英文原文。

名詞一句白話今天哪一步
終端機(terminal)用打字跟電腦講話的黑框;AI 替你打的指令就是在這裡跑卡 2½ 你自己開一次登入
Git替一個資料夾記歷史的工具:每存一版就是一筆 commit,隨時能看差異、回到任一版卡 4 起全部
版本庫/倉庫(repository,簡稱 repo)被 Git 管起來的那個資料夾(本機一份、GitHub 一份)卡 4
commit(存一版)把現在的樣子拍一張快照、寫一句為什麼;本機動作卡 4、6b、7c、8
push(推上去)把本機的快照送到 GitHub;commit ≠ push同上
diff(差異)兩版之間哪幾行變了:紅減號=拿掉、綠加號=新加卡 6b、7a
History/log(歷史)所有 commit 排成一列,每筆可點開看那一版卡 7d、GitHub 的時鐘圖示
restore(還沒存的錯,救回)把改壞、還沒 commit 的檔拉回上一版卡 7b
revert(已經出去的錯,撤銷)再加一筆「反向」commit,原本那筆留著;歷史不改寫卡 7d
reset/rebase/force push三個會改寫歷史的動作,今天全禁;AI 提議就回「不要」全程
GitHub放 repo 的網站;Public repo 誰都看得到卡 4 起
GitHub PagesGitHub 免費把 repo 裡的 index.html 變成公開網址;通常一兩分鐘亮卡 5
GitHub CLI(gh)在終端機操作 GitHub 的指令;有了它,AI 才能替你「建 repo、開 Pages」而不用你去網站點卡 2、2½、4、5
gh auth login把「代表你」的鑰匙放進這台電腦;之後 push 用鑰匙、不用密碼;人自己做卡 2½
winget/HomebrewWindows/Mac 的「用一行指令裝軟體」;AI 就是用它替你裝 git 與 gh卡 2
AI agent(代理)會自己開檔、改檔、跑指令的 AI(W2 作業說的「會自己動手的 AI」);今天兩台:Antigravity、Codex全程
AntigravityGoogle 的 agent 桌面版;個人 Gmail、18 歲以上、免費額度每週重算;只能碰你開的那個資料夾路線 A
Implementation Plan(實作計畫)它動手前給你看的計畫;讀完再按 Proceed,不同意按 Review 留意見卡 4、6、8
Walkthrough/diff 面板做完後的「我改了什麼、怎麼驗」+逐行差異卡 6b
Terminal Command Auto Execution三種:Request Review(每條指令先問你,今天要的)/Proceed in Sandbox/Always Proceed(不問,今天不准)開場檢查那道閘
Permissions(Deny > Ask > Allow)七種動作各自可設「一律拒絕/先問/一律允許」;sudo 這種放 Deny開場檢查那道閘
規則檔先把要交代的事寫下來:Antigravity 讀 .agents/rules/、Codex 讀 AGENTS.md;沒生效也沒關係,工單裡的界線才是主力起步包
Codex(路線 A′)ChatGPT 桌面版左上角切過去的 agent;免費方案含、額度沒公布數字;沙箱模式擋到指令時先讀錯誤訊息再決定路線 A′
localStorage瀏覽器裡的小抽屜,網頁可以把數字存進去、重新整理還在;v1 app 靠它「記得住」卡 6
工單/需求卡目標/背景/輸出/界線四欄(W2 那張);界線那欄最常被漏卡 6、8
A1–A4看得懂它打算做什麼/看得懂它做了什麼/破壞性動作先問/拒絕得了越界全程

稍微長一點的三件事

一、Git 三個動作,今天只用這三個

Git 是一套替一個資料夾記歷史的工具。不是整台電腦、也不是雲端硬碟自動備份——你指定哪個資料夾,它就只管那個資料夾。今天全部動作都發生在 my-panel 裡面,所以卡 1 的第一句話才是「只看、不動,告訴我你站在哪」。

  1. commit(存一版):把資料夾現在的樣子拍一張快照,附一句「我為什麼改」。這是本機動作——做完你的電腦裡多一筆歷史,網路上還沒有。
  2. push(推上去):把本機累積的快照送到 GitHub。commit 不等於 push。「我存了」跟「網路上有了」是兩件事,很多人半夜就卡在這裡:自己看得到、同學打開卻是舊的。
  3. 回去:分兩種。還沒 commit 的錯,用 restore 一秒拉回上一版;已經 push 出去的錯,不能抹掉,只能再加一筆改回去(revert)。原本那筆錯的留在歷史裡。

為什麼全程禁止 reset、rebase、force push:這三個會改寫歷史。在「兩個人一起改一份東西」的場合,改寫歷史等於把別人手上的版本弄丟。AI 提議用它們的時候,回一句「不要」——這是今天最容易做到的一次 A4。

二、Antigravity 畫面上四個位置,跟那道閘

這四個位置你要指得出來,比記得住名字有用。按鈕名稱以現場為準,跟這裡寫的對不上很正常(它改版很快)——對不上就看它旁邊的說明,或直接問它「這顆是什麼」。

要練的在畫面的哪裡你要做的動作
A1 看得懂它打算做什麼Implementation Plan(實作計畫)那一份讀完再按 Proceed。讀不懂就別按
A2 看得懂它做了什麼程式碼 diff 與 Walkthrough(做完的變更摘要與怎麼驗)對照 diff 跟計畫:它做的跟它說要做的一樣嗎
A3 破壞性動作先問Permissions:Deny > Ask > Allow 三層,動作分七種(讀檔/寫檔/讀網頁/操作網頁/終端機指令/離開沙箱執行/外掛工具)確認自己在 Request Review;把 sudo 這種丟進 Deny
A4 拒絕得了越界計畫上可以留意見,標頭有一顆 Review 按鈕——不按 Proceed,改把意見送回去今天至少做一次:留一句具體的理由、按 Review 退回、看它改了什麼

那道閘:Terminal Command Auto Execution。它有三種模式——Request Review(每條指令先問你)、Proceed in Sandbox(在沙箱裡自動跑,要離開沙箱才問)、Always Proceed(不問)。今天全班要在 Request Review。切到 Always Proceed 之後,它做什麼你都看不到,A1 跟 A3 這兩件就再也練不到了,而且畫面上看不出來。開場時打開設定,跟旁邊的人互相看一眼。

還有一條它自己畫的線:它預設只能碰你開的那個專案資料夾,碰不到你電腦上別的地方。這不是我們加的限制,是工具設計者也知道「agent 亂跑到專案外面」是主要風險。看得懂這條線為什麼存在,比背四個名詞有用。

三、gh 是什麼,為什麼 AI 需要它

GitHub 是一個網站,你平常用滑鼠在上面點。gh(GitHub CLI,command line interface,命令列介面)是同一套功能的打字版:在終端機打一行字,等於在網站上點好幾下。

關鍵在這裡:AI agent 沒有手,也沒有滑鼠,它會的是打字。所以你叫它「幫我建一個公開 repo」「幫我開網址」,它靠的就是 gh。沒裝 gh,它只能教你怎麼點,不能替你點——這就是卡 2 要先裝它的原因,也是今天跟前幾週最大的差別。

而 gh 要先知道「你是誰」才動得了你的帳號,這就是卡 2½ 的 gh auth login:把一把代表你的鑰匙放進這台電腦。鑰匙不經過 AI——它不需要知道你的密碼,也不該知道。之後它下 git push,用的是這把鑰匙。

工作坊第一階段的名詞,用我們的例子講一次

這張是上面那本字典的續篇:經濟系那套公開教材第一階段 P1–P9 出現過、而上表還沒收的名詞,全部換成今天的例子(資料夾 my-panel、檔案 index.html、喝水計數面板)再講一次。一樣不用背,卡住回來查那一列。

名詞一句白話(用今天的例子)今天哪張卡
工作資料夾(working folder)你現在開著、準備讓 AI 動手的那個資料夾——今天是 my-panel卡 1
完整路徑(full path)這個資料夾在電腦裡的完整地址;兩個同名資料夾靠它分辨卡 1
根目錄(root)這個專案最上層那一層,不是整顆硬碟的最上層;index.html 要放在這裡卡 1、5
main(主線)今天唯一那條正式的版本主線;不開別條卡 4、6b、7d
remote/origin(遠端)remote 是網路上那一份版本庫;origin 是本機替主要那個網址取的慣用名字卡 4
.gitignore寫明哪些「還沒收進歷史」的檔不要收進來。它救不了已經 commit 出去的東西,也不是保密工具卡 4
git add(放進暫存區)把東西排進下一版而已,沒有存版、也沒有上傳卡 4、6b
暫存區(staging area,也叫 index)下一筆 commit 要收的那份清單卡 4、6b
staged diff(暫存區差異)commit 之前最後一次逐行核對;卡 4 停下來等你確認的就是它卡 4、6b
工作區(working tree)你眼前實際看到、正在編輯的那份 index.html卡 6、7a
status(現況報告)問 Git「現在有什麼變動」;只是看,不會改也不會存卡 6、7b
未追蹤(untracked)檔案已經在了,但從來沒被收進任何一版——它多生出來的檔會長這樣卡 6
尚未提交(uncommitted)改動還留在工作區或暫存區,還沒成為 commit,所以還退得回去卡 6、7a
Markdown(.md)好讀的純文字格式,Git 逐行比得出差異;起步包那張 工單-v1.md 就是卡 6
紅色減號(−)改之前有、現在被移除的那一行;不代表那行內容一定錯卡 6b、7a
綠色加號(+)改完才出現的那一行;不代表那行內容一定對卡 6b
commit 訊息(commit message)寫給三個月後的你看的說明:改了什麼、為什麼改,不是寫檔名卡 4、6b、7c、8
origin/main你這台電腦記著的「GitHub 上那條 main 現在到哪一筆」卡 4、6b、7d
同步(in sync)本機 main 與 origin/main 指向同一筆最新的 commit卡 4、6b、7d
本機歷史/遠端歷史只存在這台電腦的 commit / 已經 push 到 GitHub 的 commit;差一筆,同學打開就是舊的卡 6b
雜湊值(hash)Git 給每筆 commit 的身分證號,畫面上通常只顯示前幾碼卡 7c、7d
HEAD指向你現在所在的那一筆 commit,不包含還沒 commit 的修改卡 7
HEAD~1HEAD 的前一筆;今天是一條直線的歷史,所以就是上一版卡 7
show(只讀舊版)直接讀出某一筆 commit 裡的檔案內容,不切換版本、不動 HEAD、不動工作區卡 7(只想看、不想改的時候)

這張表改寫自那套公開教材第一階段 P1–P9 的名詞表(CC BY-NC-SA 4.0)。上面那張表收過的(Git、commit、push、diff、restore、revert、reset、版本庫…)這裡不再列一次。

這一節的事實來源:共用教材 P1〈GitHub 共用基礎版〉、P2〈AI Agent 共用基礎版〉與 W2 作業指南。本頁不寫版本號、不拿介面截圖當唯一依據——它們改版很快。

4 路線 A:八張提示詞卡

這節做完你會有什麼:一個公開倉庫、一個手機打得開的網址、五筆看得懂的歷史。

這八張卡改寫自那套教材第一階段 P1–P9;原版闖關頁在這裡,回家想用它再走一遍也行(它的例子叫 research-practice-project,別跟 my-panel 做在同一個資料夾)。

每張卡六欄:為什麼/貼這句/它會做什麼/你要看什麼再按同意/幕後指令/卡住怎麼辦,再加一段一步一步做。「幕後指令」是給想看的人,學生不用打——那些是 AI 替你跑的。

三條全課通用的規矩,每張卡都適用:
① 密碼、驗證碼永遠不貼進 AI 的對話框(W2 作業「三件別做的事」第 2 條)。
② 它要跑的每條指令你先看一眼再按同意——看不懂就問它「這條指令會做什麼」。
③ 卡住就把整段錯誤訊息貼給它,再讀它的解釋(第 5 節的出錯四步)。

路線 A′(Codex)的差異寫在每張卡最後一格紫色方塊裡。多半是「一樣」,只有登入、規則檔、沙箱三處不同。

卡 1只查看(工作坊 P1)

為什麼Git 管理的不是整台電腦,是「一個資料夾」。AI 站錯資料夾,後面每一步都會做在別的地方——動作全對、位置全錯。所以第一句話永遠是「只看、不動」,替後面畫出邊界。這也是 A1(看得懂它打算做什麼)的第一次練習:它連查看都會先告訴你要跑什麼。

觀念與名詞(改寫自工作坊第一階段 P1)Git 的範圍不是整台電腦,是你現在開著的那個資料夾。AI 站錯路徑,指令本身全對,東西卻做到別的專案去了。所以第一步只讀不寫:把完整路徑、最上層有哪些檔案、這裡是不是版本庫先核對一次,等於替今天後面所有動作先畫好界線。

  • 工作資料夾(working folder):你現在開著、準備讓 AI 動手的那個資料夾——今天就是 my-panel。
  • 完整路徑(full path):這個資料夾在電腦裡的完整地址;兩個同名資料夾靠它分辨。
  • 根目錄(root):這個專案最上層那一層,不是整顆硬碟的最上層;等一下 index.html 要放在這裡。
  • 版本庫(repository,簡稱 repo):資料夾加上 Git 替它記的那份歷史;現在還沒有,卡 4 才會建。

貼這句

我已經在這裡打開了資料夾 my-panel。請只查看、不要修改任何東西:告訴我這個資料夾的完整路徑、裡面有哪些檔案、這裡現在是不是 Git 版本庫,以及這台電腦有沒有裝 git 跟 gh(GitHub CLI),各是什麼版本。

一步一步做

  1. 在 Antigravity 用「開啟資料夾」打開你新建的空資料夾 my-panel。畫面左邊會列出這個資料夾裡的東西——現在多半是空的。
  2. 找到可以打字送出的那一格(通常在畫面下方或右側的對話面板),把上面那段話整段貼進去,送出。
  3. 它會在對話裡先列出要跑的幾條指令,畫面上跳出一個黑框問你要不要執行。看一眼指令,按同意。
  4. 跑完它用白話回報四件事:資料夾完整路徑、裡面有哪些檔案、是不是 Git 版本庫、git 與 gh 裝了沒。
  5. 對著它回報的那條路徑念一次,確認結尾真的是 my-panel。

字對不上就看它旁邊的說明,或問它「這顆是什麼」。

它會做什麼跑幾條只讀的指令,回報路徑、檔案清單、「not a git repository」、git/gh 有沒有裝。它的計畫應該只有四件事:回報完整路徑、列出根目錄的檔案、檢查有沒有 Git、全程不修改任何檔案——多出第五件就是越界。

你要看什麼再按同意回報的路徑是不是你剛建的那個 my-panel。「not a git repository」是正常的,還沒開始。三個地方一起對一次:資料夾名稱是 my-panel、Git 顯示「尚未建立」、commit 數是 0。

幕後指令pwd(Windows:Get-Location)、ls、git status、git --version、gh --version

卡住怎麼辦路徑不是你的資料夾 → 停,用「開啟資料夾」重開對的那個。它說「找不到 git」→ 正常,卡 2 就是裝它。

路線 A′(Codex):一樣,提示詞一字不改。差別只在怎麼開:ChatGPT 桌面版左上角的切換器切到 Codex(切對了左上角會顯示 Codex),再用新對話或「開啟資料夾」指到 my-panel。

卡 2讓它替你裝工具(接 W2 作業)

為什麼agent 不只會寫程式——它會查版本、裝工具、讀錯誤訊息、告訴你下一步。這就是 W2 說的「會自己動手的 AI」。但「同意」那一下是你的:Request Review 模式下,每一條會改動這台電腦的指令都會停下來等你按(A3,破壞性動作先問)。今天你會按十幾次同意,每一次都要看得懂它要跑什麼——這比背指令重要。

貼這句

這台電腦如果沒有 git 或 gh(GitHub CLI),請幫我安裝:Windows 用 winget(套件 Git.Git 與 GitHub.cli),Mac 用 Homebrew(git 與 gh)。每一條指令執行前先告訴我它會做什麼,等我同意再跑。裝完後告訴我要不要重開終端機或重開這個程式才找得到新指令。不要幫我登入 GitHub,登入我自己來。

一步一步做

  1. 把那段話貼進去送出。它會先列一張清單:要檢查什麼、要裝什麼、分幾條指令。
  2. 每一條會動到這台電腦的指令,都會跳出一個「要不要執行」的框。看清楚套件名再按同意——今天你會按十幾次。
  3. 安裝時黑框裡會跑進度條,有時候要等一兩分鐘。不要按取消,也不要以為當掉了。
  4. 裝完它會回報版本,並提醒你重開。把 Antigravity 整個關掉再打開,重新用「開啟資料夾」打開 my-panel。
  5. 重開後貼一句「請再確認一次 git 與 gh 的版本」。兩個都報得出版本,這張卡才算過。

字對不上就看它旁邊的說明,或問它「這顆是什麼」。

它會做什麼一條一條列出安裝指令,等你按同意;裝完回報版本;提醒你重開。

你要看什麼再按同意指令裡的套件名是不是 Git.Git、GitHub.cli;有沒有多裝你沒要的東西。

幕後指令winget install --id Git.Git -e、winget install --id GitHub.cli -e;Mac:brew install git gh

卡住怎麼辦winget 說找不到 → 去 git-scm.com/download/win 與 cli.github.com 下載安裝檔,一路下一步。裝完它還是說「找不到 gh」→ 把 Antigravity(或 ChatGPT)整個關掉重開,新裝的指令要重開程式才讀得到。Mac 沒有 Homebrew → 官網的 .pkg。教室網路慢到裝不完 → 今天改走路線 B,同分,回家裝好下週接上。

路線 A′(Codex):提示詞一字不改,但有兩件事不一樣:①Codex 若開著沙箱模式(Sandbox Mode),安裝指令可能被擋——先把錯誤訊息整段讀一次,確定真的是沙箱擋的,才去設定裡把它關掉;沙箱是保護機制,不要一遇到錯誤就先關。②Windows 裝完命令列工具,要把所有終端機關掉重開,新指令才找得到。

卡 2½登入 GitHub——這一步人自己做,AI 不碰

為什麼登入=把一把「代表你」的鑰匙放進這台電腦。鑰匙不經過 AI:它不需要知道你的密碼,也不該知道。之後它下 git push 時,用的是這把鑰匙,不是你的密碼。

你做的四下(自己開一個終端機:Windows 開始鍵打「終端機」或「PowerShell」;Mac 開「終端機」)

  1. 打 gh auth login,Enter。
  2. 問你在哪用 GitHub → GitHub.com;問協定 → HTTPS;問要不要用 GitHub 帳號替 Git 認證 → Yes;問怎麼登入 → Login with a web browser。
  3. 畫面給你一組 8 碼(像 ABCD-1234),記下來,按 Enter,瀏覽器會開。
  4. 瀏覽器貼那 8 碼 → Authorize。回到終端機看到 Logged in as 你的帳號 就好了。

字對不上就看它旁邊的說明,或問它「這顆是什麼」。

幕後指令gh auth login

⚠️ 畫面上的字句以現場為準(gh 版本會變);順序對不上就一題一題讀。
⚠️ 那組 8 碼跟密碼一樣,不要貼進 AI 的對話框。

路線 A′(Codex):一樣。這一步本來就在終端機由你自己做,跟你用哪一台 agent 無關。

卡 3驗證登入、設定作者名字(工作坊 P2 前置)

為什麼每一筆 commit 都會刻著「誰、什麼時候」。這個 repo 等一下會公開,所以信箱用 GitHub 給的 noreply 位址(形如 數字+帳號@users.noreply.github.com),真信箱不上網——這是「公開之前先想個資」的第一次。順便讓 AI 示範一件它很會的事:查資料再幫你設定。

觀念與名詞(改寫自工作坊第一階段 P2 的前置)Git 跟 GitHub 是兩層:Git 在你這台電腦上記歷史,GitHub 是網路上那一份連得上、看得到的副本。這張卡做的就是兩層之間的對齊——先確認 GitHub 那一層認得你,再把「本機記歷史時要刻誰的名字」設好。名字與信箱會跟著每一筆 commit 一起公開,所以先想個資、再動手。

  • Git/GitHub:Git 是本機記歷史的工具;GitHub 是保存遠端那一份、給人看與協作的網站。兩件事,別混成一件。
  • 其餘 P2 的名詞(main、origin、.gitignore)在卡 4才用得到,到那裡再講。

貼這句

請確認我已經登入 GitHub:執行 gh auth status,用白話告訴我結果。接著幫我設定 git 的作者名字與信箱:名字用我的 GitHub 帳號名;信箱請先用 gh api user 查出我的帳號 id 與 login,設成 GitHub 的 noreply 格式「id+login@users.noreply.github.com」,因為這個 repo 會公開、每一筆 commit 都帶著信箱。設定前先把要執行的指令列給我看,等我同意。

一步一步做

  1. 貼那段話送出。它會先跑 gh auth status,黑框裡出現一段英文。
  2. 它把那段英文翻成白話——你只要找 Logged in to github.com account 後面那個名字是不是你。
  3. 接著它列出兩條設定指令等你同意。看一眼信箱像不像 數字+帳號@users.noreply.github.com。
  4. 按同意,跑完它回報設定好的名字與信箱。這張卡就過了。

字對不上就看它旁邊的說明,或問它「這顆是什麼」。

它會做什麼跑 gh auth status;查你的 id 與帳號;列出兩條 git config,等你同意。動手前它應該先再確認一次工作路徑,並提醒你這個 repo 等一下會公開。

你要看什麼再按同意Logged in to github.com account 你的帳號;名字是你的帳號名;信箱是 noreply 那種。另外自己確認一次:路徑沒跑掉、等一下要公開的檔案裡沒有真名與學號,再說「同意執行」。

幕後指令gh auth status、gh api user --jq '.id, .login'、git config --global user.name "帳號"、git config --global user.email "id+帳號@users.noreply.github.com"

卡住怎麼辦說沒登入 → 回卡 2½ 再做一次。noreply 弄不出來 → 先用東華信箱也行(公開的是信箱,不是密碼),下週再改。

路線 A′(Codex):一樣,提示詞一字不改。

卡 4第一版進倉庫、上 GitHub(工作坊 P2+P4+P5)

先做一件手動的事:把上週存的單檔複製進 my-panel,改名 index.html(全小寫)。沒有那個檔 → 起步包 v0-sample.html 改名 index.html,同分。

為什麼三個動作,三個意思——init 是「這個資料夾從現在起有歷史」;commit 是「存一版、寫一句為什麼」;push 是「把這版放到 GitHub」。commit 不等於 push:「我存了」跟「網路上有了」是兩件事,很多人半夜就卡在這裡。公開 repo 任何人都看得到,所以個資檢查在你這一邊,不在 AI 那一邊。

觀念與名詞(改寫自工作坊第一階段 P2+P4+P5)Git 存一版其實分三層:工作區是你眼前那份 index.html;暫存區是「下一版要收哪些東西」;commit 才是正式的存檔點。add 只是把東西排進暫存區,既沒存版、更沒上網。最後 push 才把已經存好的版本送上 GitHub——還沒 commit 的修改一律不會跟著上去。本機的 main 跟 origin/main 指到同一筆,兩邊才算同步。

  • main:今天唯一那條正式的版本主線。
  • remote/origin(遠端):remote 是網路上那一份版本庫;origin 是本機替主要那個網址取的慣用名字。
  • .gitignore:寫明哪些「還沒收進歷史」的檔不要收進來。它救不了已經 commit 出去的東西,也不是保密工具。
  • git add(放進暫存區):只是排進下一版,沒有存版、也沒有上傳。
  • 暫存區(staging area,也叫 index):下一筆 commit 要收的那份清單。
  • staged diff(暫存區差異):commit 之前最後一次逐行核對——這張卡停下來等你確認的就是它。
  • origin/main:你這台電腦記著的「GitHub 上那條 main 現在到哪一筆」。
  • 同步:本機 main 與 origin/main 指向同一筆最新的 commit。

貼這句

資料夾裡現在有 index.html,是我上週做的面板。請照順序做,每個會改東西的步驟執行前先列出來等我同意:
1. 替這個資料夾加上 Git 版本控制,分支叫 main。
2. 建一個 .gitignore,排除 .DS_Store 與 Thumbs.db。
3. 先把要收進第一版的檔案列給我看,等我確認再 commit,訊息寫「v0:上週的面板放進版本控制」。
4. 在我的 GitHub 建一個公開 repo 叫 my-panel,把本機的 main 推上去。
5. 完成後給我 repo 網址與那筆 commit 的網址,我要自己打開確認。
公開之前提醒我檢查 index.html 裡有沒有真名、學號、電話。

一步一步做

  1. 先用檔案總管(Mac 是 Finder)把單檔複製進 my-panel、改名 index.html。起步包是 ZIP 的人先解壓縮再用。
  2. 回 Antigravity 貼那段話送出。它會先給一份實作計畫(Implementation Plan),列出打算分幾步做。
  3. 讀完計畫按 Proceed(同意往下)。接著每一條 git 指令都會跳框問你,一條一條看、一條一條按。
  4. 走到「列出要收進第一版的檔案」那一步它會停下來等你確認——清單上只該有 index.html 跟 .gitignore。
  5. 全部跑完它給你兩個網址。自己點開,在 GitHub 上看到 index.html、1 筆 commit、Public。

字對不上就看它旁邊的說明,或問它「這顆是什麼」。

它會做什麼列計畫 → init → 建 .gitignore → 列檔案等你確認 → commit → gh repo create → push → 回報兩個網址。計畫裡該看得到這幾步:再確認一次路徑、檢查有沒有不該公開的資料、建立 Git 與 .gitignore、列出將納入的檔案並顯示 staged diff 等你確認、才 commit、建立公開 repo 並設定 origin、推送 main、回報網址;全程不改寫遠端歷史。

你要看什麼再按同意要收的檔案只有 index.html 與 .gitignore;repo 名 my-panel、Public;親自打開網址看到 index.html 與 1 筆 commit。儀表板上四件事一起對:Git 已建立、分支是 main、remote 已連接、commit 數從 0 變成 1,而且工作資料夾是乾淨的(沒有漏在外面沒存到的東西)。

幕後指令git init、git branch -M main、git add index.html .gitignore、git diff --cached --stat、git commit -m "v0:上週的面板放進版本控制"、gh repo create my-panel --public --source=. --push、git remote -v

卡住怎麼辦Name already exists → 改叫 my-panel-2(⚠️網址會跟著變,交件時用複製的)。push 被拒 → 叫它先跑 gh auth status 解釋,絕不 force。它把不相關的檔一起加進去 → 「先列檔、拿掉不相關的,再顯示 staged diff」。

路線 A′(Codex):一樣,提示詞一字不改。Codex 動工前讀的規則檔是起步包裡的 AGENTS.md,不是 .agents/rules/ 那一份——兩份內容相同,放著就好。

卡 5開網址(GitHub Pages)

為什麼Pages=GitHub 免費把你 repo 裡的 index.html 放到一個公開網址上。它要把檔案搬到 GitHub 自己的伺服器,通常一兩分鐘,跟你的電腦快不快無關。這一步做完就是今天的夠了線。

貼這句

請替 GitHub 上的 my-panel 開啟 GitHub Pages,來源用 main 分支的根目錄。用 gh api 做,執行前先把指令給我看。開好後查詢並回報網站網址(html_url),並告訴我 GitHub 通常要等一兩分鐘才會亮。

一步一步做

  1. 貼那段話送出。它會列一條 gh api 指令等你同意。
  2. 按同意。黑框會回一大段機器讀的資料(JSON),不用看懂——它會挑出網址用白話告訴你。
  3. 拿手機打開那個網址。沒亮就先往下做第 6 段,回頭再重新整理。
  4. 亮了就把那一行網址複製起來,等一下交件要貼。不要用手打。

字對不上就看它旁邊的說明,或問它「這顆是什麼」。

它會做什麼一條 POST 開 Pages、一條 GET 查網址;回報 https://帳號.github.io/my-panel/。

你要看什麼再按同意網址長得像上面那樣;用手機打開看到自己的面板(沒亮就先往下做,回頭重新整理)。

幕後指令gh api -X POST repos/帳號/my-panel/pages -f 'source[branch]=main' -f 'source[path]=/'、gh api repos/帳號/my-panel/pages --jq .html_url

卡住怎麼辦API 回錯 → 改走瀏覽器:repo → Settings → Pages → Build and deployment → Deploy from a branch → main、/(root) → Save。網址開了只看到一行字 → 那是 README,代表找不到 index.html:檔名是不是全小寫、是不是在最外層。一直 404 → 先做第 6 段,回頭 Ctrl+Shift+R 強制重新整理。

路線 A′(Codex):一樣,提示詞一字不改。⚠️沙箱模式下「要連出去」的動作會被攔下來請你核准,看到就按同意。

卡 6讓它做成真的 app(工單 v1)

為什麼這是 P5「六件新事」第 ⑤ 件——交出去驗收的姿勢:工單寫清楚 → 看它的計畫 → 讓它做 → 你驗收 → 不對就退回。agent 很強,一張工單能寫出兩百行;但它做得對不對,只有你測得出來(W2 那張三行小表:我預期/實際上/一樣嗎)。工單用的是 W2 的需求卡格式,「界線(不放什麼)」那欄最重要——P5 第 ④ 件:它做錯,先看你少交代了什麼。

觀念與名詞(改寫自工作坊第一階段 P3+P6)它說「做完了」只是回報,證據在檔案狀態裡。它改完 index.html,改動還停在工作區——檔案變了,但還沒存成任何一版,所以這一步測壞了不可怕、退得回去。status 是 Git 的現況報告,只是看、不會動到任何東西;它要是多生一個工單沒寫的檔,status 會把那個檔列成「未追蹤」,那就是越界最直接的證據。

  • 工作區(working tree):你眼前實際看到、正在編輯的那份檔案狀態。
  • status(現況報告):問 Git「現在有什麼變動」;查看它不會修改也不會存檔。
  • 未追蹤(untracked):檔案已經在了,但從來沒被收進任何一版——多出來的檔會長這樣。
  • 尚未提交(uncommitted):改動還留在工作區或暫存區,還沒成為 commit。
  • Markdown(.md):好讀的純文字格式,Git 逐行比得出差異;起步包那張 工單-v1.md 就是。

貼這句(起步包 工單-v1.md 就是這段)

請照下面這張工單改 index.html。改之前先列出實作計畫(會改哪些檔、分幾步、哪裡你不確定),等我按同意再動手;做完給我改了什麼的摘要,以及我可以怎麼測。

【任務】把 v0 面板做成「我的一週小面板」
【輸出(我預期看到什麼)】
1. 最上面顯示今天日期,格式 YYYY-MM-DD。
2. 原本那顆按鈕還在;按下去的計數重新整理後還在(存在瀏覽器裡)。
3. 每天自動從 0 開始,但保留最近 7 天的數字,畫成 7 根長條圖,今天那根標出來。
4. 右上角一顆「深色/淺色」切換,重新整理後記得我的選擇。
5. 手機直式(寬 360px)不破版、不用左右捲。
6. 一顆「清除全部資料」按鈕,按下去先在畫面上問我一次再清(不用 alert)。
【界線(不放什麼)】
單檔 index.html,CSS 與 JavaScript 都寫在裡面;不連網、不用任何外部套件或字型;不用 alert/confirm/prompt;不放真名、學號、電話;不加動畫與音效;只改 index.html、不新增其他檔案。

一步一步做

  1. 打開起步包裡的 工單-v1.md(或直接用這裡這段),整段複製貼進對話框送出。
  2. 它會先出一份實作計畫。先別按——數一數它說要改幾個檔,看看有沒有工單界線外的東西(多一個檔、加動畫、連網)。
  3. 沒問題按 Proceed;有問題按 Review,把你不要的那一條寫下來送回去。
  4. 它改完會給你摘要與怎麼測。用瀏覽器打開 index.html,照下面「測五個邊角」逐項試。
  5. 有錯就把錯誤整段貼回去給它修,修完再測一次。它說「好了」不算數,你看到對的結果才算。

字對不上就看它旁邊的說明,或問它「這顆是什麼」。

它會做什麼先出一份實作計畫(Antigravity 叫 Implementation Plan)等你按 Proceed;然後改 index.html;最後給摘要與測法。計畫裡要講清楚三件:只會動 index.html 的哪些地方、等你同意才動手、改完先不 commit(存版是下一張卡的事)。

你要看什麼再按同意計畫只動 index.html;沒有「順便重做整頁」。做完測五個邊角:①連按兩次→加 2?②重新整理→數字還在?③切深色再重新整理→還是深色?④視窗縮到手機寬→不用左右捲?⑤日期是 2026-09-21、不是 Sep 21?再看一次狀態:有「尚未提交的修改」、commit 數跟卡 4 一樣沒變(它不該偷偷幫你存版),而且檔案清單裡沒有工單沒寫的新檔。

卡住怎麼辦它一次改了三個檔 → 退回:「工單寫只改 index.html,請只改那一個」。跑起來壞了 → 瀏覽器按 F12 → Console 的紅字整段貼給它。它問你要不要用某個套件 → 回「不要,工單寫不連網」。

路線 A′(Codex):一樣,提示詞一字不改。Codex 沒有一個叫 Implementation Plan 的面板,它把計畫寫在對話裡——一樣是讀完再讓它動手。

卡 6b讀 diff、存 v1、push(工作坊 P6+P7)

為什麼diff 是你唯一能親眼看見它做了什麼的地方(A2)——紅色減號是拿掉的、綠色加號是新加的。commit 訊息是寫給三個月後的你,那時你完全不記得今天做了什麼。這一版存成一筆,之後才有東西可以回去。

觀念與名詞(改寫自工作坊第一階段 P6+P7)紅色減號那幾行是改之前有、現在被拿掉的;綠色加號那幾行是改完才有的。紅綠只告訴你「哪裡不一樣」,不代表對或錯——你要對的是「它動的範圍,跟它先前說要動的一不一樣」。看完就把這一版存起來、推上去,日常的循環才算走完一圈:改 → 看 diff → 放進暫存區 → commit → push。commit 訊息寫「為什麼改」,不是寫檔名。

  • 紅色減號(−):改之前有、現在被移除的那一行;不代表那行內容一定錯。
  • 綠色加號(+):改完才出現的那一行;不代表那行內容一定對。
  • commit 訊息(commit message):寫給三個月後的你看的說明,要看得懂改了什麼、為什麼改。
  • 本機歷史/遠端歷史:只存在這台電腦的 commit / 已經 push 到 GitHub 的 commit。兩邊差一筆,同學打開看到的就是舊的。

貼這句

測過了,功能正確。請把這次修改的 diff 逐段列給我看,用白話解釋紅色減號與綠色加號各是什麼;然後只把 index.html 存成第二個版本,commit 訊息寫「v1:記得住、七天長條圖、深色模式」,推上 GitHub。推完確認本機 main 跟 origin/main 一致。

一步一步做

  1. 貼那段話送出。它會把這次改動的 diff 逐段列在對話裡:紅色前面是減號、綠色前面是加號。
  2. 對著看一遍——它動的地方是不是都在你要的範圍裡,有沒有你沒要求的東西混進去。
  3. 接著它列 commit 與 push 的指令等你同意,一條一條按。
  4. 跑完它回報本機跟 GitHub 一致。去 GitHub 看到 2 筆 commit,手機重新整理看到 v1(可能要等一兩分鐘)。

字對不上就看它旁邊的說明,或問它「這顆是什麼」。

它會做什麼逐段列出 diff 並用白話解釋紅綠;只把 index.html 存成第二版、推上 GitHub;推完確認本機 main 跟 origin/main 一致。存版前它該先列出全部已暫存的檔案(結果必須只有 index.html)、顯示 staged diff、跟你核對 commit 訊息,再 commit 與 push。

你要看什麼再按同意GitHub 上 2 筆 commit;手機重新整理看到 v1(可能要等一兩分鐘)。歷史圖多出第二個節點、本機與 GitHub 同步(狀態不再說「領先 1 筆」)。

幕後指令git diff -- index.html、git add index.html、git diff --cached --stat、git commit -m "v1:記得住、七天長條圖、深色模式"、git push origin main、git status --short --branch

卡住怎麼辦GitHub 看不到第二版 → 先分辨是還沒 commit、還是 commit 了沒 push(叫它跑 git status --short --branch)。

路線 A′(Codex):一樣,提示詞一字不改。

卡 7改壞再救回(工作坊 P9 精簡成四段)

為什麼這是全部關卡裡最不該砍的一關——你半夜真正會遇到的就是它。兩種「回去」要分清楚:還沒 commit 的錯,restore 一秒回來;已經 push 出去的錯,不能抹掉、只能「再加一筆改回去」(revert)。歷史不會被改寫——所以三個月後的你、還有 W5 要審你作品的同學,永遠追得到發生了什麼。這也是為什麼全程禁止 reset、rebase、force push。

觀念與名詞(改寫自工作坊第一階段 P8+P9)「回去」其實是三個不同動作,處理的是不同狀態:只想看舊版長什麼樣,show 讀出來就好,什麼都不會被改動;還沒 commit 的錯,restore 把工作區那份蓋回上一版(沒存過的內容就這樣沒了);已經推出去的錯不能抹掉,revert 是再加一筆反向的 commit,原本那筆留在歷史裡。要挑哪一筆,先用 log 看歷史:每筆 commit 都有一組雜湊值當身分證,HEAD 指著你現在站在哪一筆。查歷史只是看,不會移動 HEAD、也不會改到 index.html。

  • 雜湊值(hash):Git 給每筆 commit 的身分證號,畫面上通常只顯示前幾碼;7c 要你抄下來的就是它。
  • HEAD:指向你目前所在的那一筆 commit,不包含還沒 commit 的修改。
  • HEAD~1:HEAD 的前一筆;今天是一條直線的歷史,所以就是上一版。
  • show(只讀舊版):直接讀出某一筆 commit 裡的檔案內容,不切換版本、不動 HEAD、不動工作區。
  • reset(今天禁用):把分支重新指到別筆;再加 --hard 還會蓋掉暫存區與工作檔。今天完全用不到,它提議就回「不要」。

7a 貼這句

請把 index.html 裡整段 <script>…</script> 刪掉並存檔,但不要 commit。然後顯示 git diff,告訴我現在工作區有什麼變化。

→ 看紅:一整段減號。瀏覽器重開 index.html:按鈕沒反應了。

7a 一步一步做

  1. 貼 7a 那段送出。它會列出要改哪個檔、等你同意。
  2. 同意後它刪掉那一段、存檔,再把 git diff 的結果貼在對話裡——整段紅色減號。
  3. 用瀏覽器打開資料夾裡的 index.html,按那顆按鈕:沒反應了。這是你親手做出來的壞掉。

字對不上就看它旁邊的說明,或問它「這顆是什麼」。

7b 貼這句

我不要這個修改。請用 git restore 把 index.html 救回上一版,然後證明 diff 已經是空的、工作區乾淨。不要用 reset。

→ 幕後:git restore -- index.html、git diff、git status --short。

7b 一步一步做

  1. 貼 7b 那段送出。它會列 git restore 那一條等你同意。
  2. 同意後它再跑一次 git diff,這次是空的;git status 說工作區乾淨。
  3. 重新整理瀏覽器裡的 index.html:按鈕又會動了。這一種錯,一秒就回得來。

字對不上就看它旁邊的說明,或問它「這顆是什麼」。

7c 貼這句

請再把 <script> 那一段刪掉一次,這次 commit(訊息寫「練習:故意刪掉 script」)並推上 GitHub。推完告訴我這筆 commit 的 hash。

→ 等一兩分鐘,手機重新整理:網址壞了(按鈕沒反應,但頁面沒有消失——這是「跑得起來但不對」的實體版)。

7c 一步一步做

  1. 貼 7c 那段送出。這次多兩條:commit 跟 push,一樣一條一條按同意。
  2. 它會回報這筆 commit 的 hash(一串英數字,等於這一版的身分證號)。抄下來。
  3. 等一兩分鐘,拿手機重新整理你的網址——壞了:頁面還在,按鈕沒反應。

字對不上就看它旁邊的說明,或問它「這顆是什麼」。

7d 貼這句

剛剛那筆是故意弄壞的。請用 git log 找到它,用 git revert 撤銷它(會新增一筆撤銷 commit,原本那筆留在歷史裡),然後推上 GitHub。全程不准 reset、rebase、force push。做完顯示最近四筆歷史,並確認本機與 origin/main 一致。

→ 幕後:git log --oneline -3、git revert --no-edit <hash>、git push origin main、git log --oneline -4、git status --short --branch

7d 一步一步做

  1. 貼 7d 那段送出。它先跑 git log 把最近幾筆列出來,指出哪一筆是你故意弄壞的那筆。
  2. 接著列 git revert 與 git push 等你同意。它若提議 reset 或 force push,回一句「不要,今天不准改寫歷史」。
  3. 跑完它顯示最近四筆歷史。手機重新整理:活了。GitHub 的 History 也是四筆。

字對不上就看它旁邊的說明,或問它「這顆是什麼」。

你要看什麼四筆歷史 v0/v1/練習:故意刪掉 script/Revert "練習…";手機重新整理:活了。GitHub 的 History 也是四筆。
四段各有一個停點,它動手前要先讓你核對:①路徑對、origin 是你自己建的 my-panel、分支是 main;②只讀那一段做完,分支、HEAD、工作區都沒變;③restore 只拿掉你指定的那一段,沒順手動別的;④故意弄壞那筆仍留在歷史裡,revert 是另外新增的一筆,最後本機與 origin/main 同步。證據對不上就回一句「停」。

卡住怎麼辦revert 說有衝突 → 停,不要讓它自己選,舉手。push 被拒 → 叫它 fetch 後解釋差在哪,絕不 force。手機沒變 → 快取,Ctrl+Shift+R 或等一下。

路線 A′(Codex):一樣,四段提示詞一字不改。

卡 8你的功能+退回它一次(A4)

為什麼拒絕得了它,你才是導演。「按一下 Review」不算,寫得出理由才算——這一句就是今天 e學苑 的第三行。這也是快的人的第四關:功能自己出,agent 再強,需求是你的。

貼這句(底線自己填;例:在面板上加一個「今天一句話」的輸入框,重新整理後還在)

我想加一個功能:___。請先列實作計畫,不要動手。

→ 讀計畫 → 一定要退回一次:找一個你不要的(它多加的、或你想改的),按 Review 留一句「我不要 X,因為 Y」→ 它改計畫 → Proceed → 測 →

可以了。請只把這次修改 commit,訊息寫「v2:___」,推上 GitHub。

一步一步做

  1. 把底線填成你自己的一句需求,貼進去送出。它只出計畫、不動手。
  2. 讀計畫,挑一件你不要的,按 Review,在意見裡寫「我不要 X,因為 Y」送回去。
  3. 它給你第二版計畫。確認你不要的那件真的拿掉了,才按 Proceed。
  4. 測完沒問題,貼下面第二段話請它 commit 並推上去。GitHub 上會變成五筆歷史。

字對不上就看它旁邊的說明,或問它「這顆是什麼」。

你要看什麼計畫第二版真的拿掉了你不要的 X;GitHub 五筆歷史。

沒點子的人從三個裡挑——「今天一句話」欄位(重新整理後還在)/「本週總杯數」一行字/把七天長條圖換成七個圓點。

路線 A′(Codex):一樣,提示詞一字不改。Codex 沒有 Review 按鈕——你直接回一句「我不要 X,因為 Y,請改計畫」,那就是退回。

5 路線 B:全程瀏覽器

這節做完你會有什麼:跟路線 A 一模一樣的成品——網址、倉庫、看得懂的歷史。分數一樣。

沒帶筆電、用教室機、什麼都沒裝的人走這條。全部在 github.com 的網頁上按;要 AI 幫忙時,另開一個分頁用 ChatGPT 或 Gemini 的網頁版,把工單貼過去,把它產的整份 index.html 貼回 GitHub 的編輯器。

段路線 A路線 B
3 裝工具與登入裝 git/gh、gh auth login登入 github.com;沒帳號現場辦(東華信箱)
4 第一版進倉庫卡 4:agent 跑 init/commit/gh repo createNew repository → my-panel、Public、勾 README → Add file → Upload → index.html → Commit
5 開網址卡 5:gh api 開 PagesSettings → Pages → Deploy from a branch → main、/(root) → Save
6 做成真的 app卡 6/6b:agent 改、讀 diff、commit工單貼給 AI 網頁版 → 複製整份 → 鉛筆編輯 index.html 全選貼上 → Commit changes… 寫訊息 → commit 頁面看紅綠
7 改壞再救回卡 7:restore/revert鉛筆 → 刪 <script> 那行 → commit → 手機壞了 → History → 點上一筆 → <> → Raw → 全選複製 → 回 main 鉛筆貼回 → commit「救回」
8 你的功能卡 8:退回一次對 AI 網頁版說「我不要 X,因為 Y」再要一版 → 貼回 → commit

B-1 建一個公開的櫃子

  1. 開 github.com/new。名稱打 my-panel,確認選的是 Public。
  2. 勾 Add a README file,按 Create repository。
  3. 準備你的 index.html:有上週單檔的,把檔名改成 index.html(全小寫);沒有的用 v0 範例,同分。
  4. 起步包是 ZIP 的人:先在下載夾按右鍵「全部解壓縮」再用。在壓縮檔裡直接雙擊,改了會存到暫存資料夾,關掉就不見。
  5. 回 repo 首頁 → Add file → Upload files → 把 index.html 拖進去。拖不進去的人按框裡的 choose your files。只放那一個檔、放在最外層,不要多包一層資料夾。
  6. 下面 Commit message 欄寫一句這次做了什麼,例如「v0:上週的面板放進版本控制」,按 Commit changes。

這個 repo 任何人都看得到。不放真名、學號、電話、地址,任何地方都不放密碼。作業跟報告交 e學苑,不放這裡。

B-2 打開你的網址

  1. repo 上方 Settings(看不到就按分頁列最右邊的「…」)。
  2. 左邊選 Pages。
  3. Source 選 Deploy from a branch;Branch 選 main、資料夾 / (root),按 Save。
  4. 等一兩分鐘,重新整理這一頁,上面會出現「Your site is live at …」。
  5. 拿手機打開那個網址——這就是今天的夠了線。
  6. 給隔壁同學掃一次,別人的手機也打得開,才算數。
看到什麼先查這三件
404①檔名是小寫 index.html 嗎 ②它在最外層嗎 ③來源是 main + /(root) 嗎
畫面只有一行 my-panel那是 README 的內容——代表它找不到你的 index.html,查同樣三件
還是沒亮先往下做,回頭再重新整理。它有時候要久一點

免費帳號的 GitHub Pages 要用公開 repo。設成私有的話網址開不出來。

B-3 改一行,看紅綠

  1. repo 裡點開 index.html,按右上角的鉛筆。
  2. 改一句——把名字改成自己的,或換一句文字。
  3. 按 Commit changes…(字尾有三個點)→ 跳出來的框裡寫「改成我的名字」→ 再按 Commit changes。
  4. 回檔案頁,按最近一次留版那一列右邊的時鐘圖示(旁邊有數字,那就是 History),點最上面那一筆。
  5. 畫面會分兩色:紅色、前面有 − 的是拿掉的;綠色、前面有 + 的是加上的。
  6. 重新整理你的網址,確認線上真的變了。

每一次留版都要寫一句改了什麼。這句話不是寫給老師看的,是寫給三個月後的你——那時候你完全不記得今天做了什麼。

B-4 做成真的 app(工單 v1)

  1. 把附錄裡卡 6 那整段工單複製,貼進 ChatGPT 或 Gemini 的網頁版。
  2. 它會回一整份 index.html。先讀它說要做什麼,再往下捲看程式碼。
  3. 把整份複製起來,回 GitHub 點開 index.html → 鉛筆 → 全選、貼上(Ctrl+A 再 Ctrl+V)。
  4. Commit changes… → 訊息寫「v1:記得住、七天長條圖、深色模式」 → Commit changes。
  5. 重新整理你的網址,照下面五個邊角逐項測:①連按兩次→加 2?②重新整理→數字還在?③切深色再重新整理→還是深色?④手機直式→不用左右捲?⑤日期是 2026-09-21、不是 Sep 21?
  6. 有錯就把狀況三句話(我做了什麼/我預期/實際上)貼回去要它改,再貼一次。

真的來不及或 AI 網頁版不能用:起步包裡的 v1-sample.html 就是照同一張工單做出來的對照版,貼它也同分——但請先自己試一次,答案看了就不是你的了。

B-5 先弄壞它,才敢動它

今天的重頭戲。全班只弄壞同一個地方,不要各弄各的。

  1. 點開 index.html,按鉛筆。
  2. 把 <script> 那一行整行刪掉。刪這一行一定看得到後果;刪別的地方(像 </body>)瀏覽器會自己補起來,畫面常常一點事都沒有。
  3. 按 Commit changes…,訊息寫「練習:故意刪掉 script」,再按 Commit changes。
  4. 重新整理你的網址——按鈕按下去沒反應了。頁面還在,但不對——這就是「跑得起來但不對」。
  5. 回頭看你剛剛寫的那句訊息:預期跟實際一樣嗎?

救回來(四步)

  1. 按 History(最近一次留版那列右邊的時鐘圖示)。
  2. 找到弄壞之前那一筆,按那一列右邊的 <>(View code at this point)——這就是那一版的 index.html。
  3. 右上角按 Raw 旁邊的複製圖示,或按 Raw 之後全選複製。舊版畫面上的鉛筆按不動,那是正常的——舊版不能直接編輯,只能複製走。
  4. 按左上角 repo 名稱回到首頁(main)→ 打開現在的 index.html → 鉛筆 → 全選、貼上 → Commit changes…,訊息寫「救回來:把 script 補回去」。

重新整理網址,確認按鈕又會動了。

救回來的方法不是「把剛剛那次刪掉」,是「再加一筆,把它改回去」。壞掉那一筆跟救回來那一筆都還留在歷史裡——這就是為什麼它安全,也是路線 A 的 revert 在做的同一件事。

這一節的做法照抄自共用教材 P7〈我的第一個 repo〉(background-knowledge/P7-我的第一個repo/)。各科同一份,本週不另寫版本。

B-6 你的功能+退回它一次

  1. 對 AI 網頁版說:「我想加一個功能:___。請先列實作計畫,不要給我程式碼。」
  2. 讀它的計畫,挑一件你不要的,回一句「我不要 X,因為 Y,請改計畫」。
  3. 第二版計畫確認你不要的真的拿掉了,才要它給整份程式碼。
  4. 貼回 GitHub、commit,訊息寫「v2:___」。那句「我不要 X,因為 Y」就是交件的第三行。

6 出錯了,先做這四步

這節做完你會有什麼:下次看到紅字,你知道第一下要做什麼。

  1. 複製錯誤訊息的原文,整段。不要截圖、不要濃縮成「它壞了」。從第一個字到最後一個字,包括看不懂的那些。
  2. 貼給 AI,前面加一句情況。例如:「我在做 ___ 的時候出現這段,請先解釋這是什麼意思,再說你會怎麼查。」——先解釋,不是先修。
  3. 看它的計畫,不要照單全收。它會列出幾個可能的原因和要做的事。挑最像你情況的那一個;會動到檔案的,先備份再試。
  4. 自己驗一次結果,記下四格。原文寫了什麼/它說是什麼/我做了什麼/結果如何。沒解掉也記——下一次問的時候,這四格就是你的問題描述。

沒有紅字的(燈不亮、畫面沒反應、按了沒事):第一步的「原文」改寫成三句——我做了什麼、我預期看到什麼、實際看到什麼。

怎麼複製:黑色的終端機視窗裡,用滑鼠選取文字後按右鍵(或 Ctrl+Shift+C);Windows 的錯誤對話框按一下再按 Ctrl+C,會複製整段文字。

一個例子

原文:404 There isn't a GitHub Pages site here.
它說:這個網址還沒有站——多半是 Pages 還沒發布完,再等一下;如果是檔名或位置錯,看到的會是另一句 File not found。
我做了:等兩分鐘重新整理;確認檔名是小寫 index.html、在最外層。
結果:重新整理後就開了。

三個常踩的

四步照抄自共用教材 P9〈電腦出錯了,先做這四步〉(background-knowledge/P9-電腦出錯先做的四步.md)。從這週起,每一門課都這樣做。

7 今天 AI 做的/你做的

這節做完你會有什麼:講得出今天為什麼要這樣分工。

AI 替你做的 12 件

  1. 查這台電腦裝了什麼、什麼版本
  2. 裝 git 與 gh
  3. 把資料夾變成版本庫
  4. 寫 .gitignore
  5. 寫 commit 訊息
  6. 在 GitHub 建一個公開 repo
  7. 把本機推上去
  8. 開 GitHub Pages、回報網址
  9. 照一張工單寫出一個 app
  10. 把 diff 逐段解釋給你聽
  11. 從歷史裡找到弄壞的那一筆
  12. 用 revert 把它救回來

只有你能做的 6 件

  1. 看計畫——它打算做什麼,你讀得懂嗎(A1)
  2. 按同意——每一條指令,你看過才按(A3)
  3. 自己登入——鑰匙不經過 AI
  4. 測試——它說「完成了」不算,你看到對的結果才算(A2)
  5. 退回它一次——拒絕得了,你才是導演(A4)
  6. 寫一句理由——為什麼退回。這句收進作業

左邊那 12 件,三年前要一個人學半年才做得完;右邊那 6 件,三年後還是只有你做得了。今天練的是右邊那一欄。

8 下週

這節做完你會有什麼:知道今天這個 repo 之後還會怎麼用。

9/28 教師節停課,不補課、不交作業。

10/05 回來做配對互審:兩個人一組,互相打開對方今天建的 repo,對他的東西提出修改,他決定要不要收——就是真正在用 GitHub 的人每天在做的那件事。

所以今天那幾筆 commit 訊息要寫得像人話。下週來看你 repo 的不是老師,是你同學。他看得懂你為什麼那樣改,才提得出修改。

你今天建的那個 repo 留著,之後每一週都會用到它。

附錄 八張卡的提示詞總表

這節做完你會有什麼:一頁抄完全部提示詞,落後的人可以直接從這裡追。

照順序放,跟上面卡片裡的一模一樣。起步包裡的 提示詞.md 也是這一份(純文字,好複製)。

卡 1|只查看

我已經在這裡打開了資料夾 my-panel。請只查看、不要修改任何東西:告訴我這個資料夾的完整路徑、裡面有哪些檔案、這裡現在是不是 Git 版本庫,以及這台電腦有沒有裝 git 跟 gh(GitHub CLI),各是什麼版本。

卡 2|讓它替你裝工具

這台電腦如果沒有 git 或 gh(GitHub CLI),請幫我安裝:Windows 用 winget(套件 Git.Git 與 GitHub.cli),Mac 用 Homebrew(git 與 gh)。每一條指令執行前先告訴我它會做什麼,等我同意再跑。裝完後告訴我要不要重開終端機或重開這個程式才找得到新指令。不要幫我登入 GitHub,登入我自己來。

卡 3|驗證登入、設定作者名字

請確認我已經登入 GitHub:執行 gh auth status,用白話告訴我結果。接著幫我設定 git 的作者名字與信箱:名字用我的 GitHub 帳號名;信箱請先用 gh api user 查出我的帳號 id 與 login,設成 GitHub 的 noreply 格式「id+login@users.noreply.github.com」,因為這個 repo 會公開、每一筆 commit 都帶著信箱。設定前先把要執行的指令列給我看,等我同意。

卡 4|第一版進倉庫、上 GitHub

資料夾裡現在有 index.html,是我上週做的面板。請照順序做,每個會改東西的步驟執行前先列出來等我同意:
1. 替這個資料夾加上 Git 版本控制,分支叫 main。
2. 建一個 .gitignore,排除 .DS_Store 與 Thumbs.db。
3. 先把要收進第一版的檔案列給我看,等我確認再 commit,訊息寫「v0:上週的面板放進版本控制」。
4. 在我的 GitHub 建一個公開 repo 叫 my-panel,把本機的 main 推上去。
5. 完成後給我 repo 網址與那筆 commit 的網址,我要自己打開確認。
公開之前提醒我檢查 index.html 裡有沒有真名、學號、電話。

卡 5|開網址(GitHub Pages)

請替 GitHub 上的 my-panel 開啟 GitHub Pages,來源用 main 分支的根目錄。用 gh api 做,執行前先把指令給我看。開好後查詢並回報網站網址(html_url),並告訴我 GitHub 通常要等一兩分鐘才會亮。

卡 6|讓它做成真的 app(工單 v1)

請照下面這張工單改 index.html。改之前先列出實作計畫(會改哪些檔、分幾步、哪裡你不確定),等我按同意再動手;做完給我改了什麼的摘要,以及我可以怎麼測。

【任務】把 v0 面板做成「我的一週小面板」
【輸出(我預期看到什麼)】
1. 最上面顯示今天日期,格式 YYYY-MM-DD。
2. 原本那顆按鈕還在;按下去的計數重新整理後還在(存在瀏覽器裡)。
3. 每天自動從 0 開始,但保留最近 7 天的數字,畫成 7 根長條圖,今天那根標出來。
4. 右上角一顆「深色/淺色」切換,重新整理後記得我的選擇。
5. 手機直式(寬 360px)不破版、不用左右捲。
6. 一顆「清除全部資料」按鈕,按下去先在畫面上問我一次再清(不用 alert)。
【界線(不放什麼)】
單檔 index.html,CSS 與 JavaScript 都寫在裡面;不連網、不用任何外部套件或字型;不用 alert/confirm/prompt;不放真名、學號、電話;不加動畫與音效;只改 index.html、不新增其他檔案。

卡 6b|讀 diff、存 v1、push

測過了,功能正確。請把這次修改的 diff 逐段列給我看,用白話解釋紅色減號與綠色加號各是什麼;然後只把 index.html 存成第二個版本,commit 訊息寫「v1:記得住、七天長條圖、深色模式」,推上 GitHub。推完確認本機 main 跟 origin/main 一致。

卡 7a|故意刪掉 script,先別 commit

請把 index.html 裡整段 <script>…</script> 刪掉並存檔,但不要 commit。然後顯示 git diff,告訴我現在工作區有什麼變化。

卡 7b|用 restore 救回來

我不要這個修改。請用 git restore 把 index.html 救回上一版,然後證明 diff 已經是空的、工作區乾淨。不要用 reset。

卡 7c|再刪一次,這次 commit 並推上去

請再把 <script> 那一段刪掉一次,這次 commit(訊息寫「練習:故意刪掉 script」)並推上 GitHub。推完告訴我這筆 commit 的 hash。

卡 7d|用 revert 撤銷,網址救活

剛剛那筆是故意弄壞的。請用 git log 找到它,用 git revert 撤銷它(會新增一筆撤銷 commit,原本那筆留在歷史裡),然後推上 GitHub。全程不准 reset、rebase、force push。做完顯示最近四筆歷史,並確認本機與 origin/main 一致。

卡 8|你的功能(先出計畫)

我想加一個功能:___。請先列實作計畫,不要動手。

卡 8|退回一次、改好之後存 v2

可以了。請只把這次修改 commit,訊息寫「v2:___」,推上 GitHub。

本頁內容來自 W3 設計正本;路線 B 那幾節沿用前一版學生頁與共用教材 P7。八張卡改寫自經濟系 Git 工作坊 P1–P9,在真的班上跑過。