生活分享
用 AI 寫程式前該懂的 Git:分支、提交與還原
讓 AI 代理改你的專案之前,先有一個回得去的檢查點。這篇依 Git 與 GitHub 官方文件,只教「還原得回來」用得到的那一小套:安裝與第一次設定、init 到 commit 的最小循環、用 git diff 看代理改了什麼、開分支再放手,以及 restore、reset、revert 三種還原分別會不會丟掉東西,附 .gitignore 與推上 GitHub 的步驟。
閱讀時間約 8 分鐘

讓 AI 代理AI 代理(AI Agent)是什麼:從回答問題到完成任務AI 代理是能依目標與環境回饋選擇下一步的軟體系統,常由語言模型、工具與執行控制組成。本文用整理活動報名資料的情境,區分聊天回答、固定工作流程與代理任務,說明規劃、實際操作和完成證據為何不同。附交辦與驗收方法,幫你看懂代理能做哪些事、何時應停下,以及為什麼自主程度不等於可靠程度。閱讀全文改程式最常出事的不是它寫錯,而是它寫錯了你回不去。解法不是先學整套 Git,而是先學會做檢查點:隨時能回到「還沒讓它動手之前」。
這篇只挑「還原得回來」用得到的那一小套,依 Git 與 GitHub 官方文件。讀完你會裝好 Git、做出第一個提交、開分支再放手,也分得清 restore、reset、revert 哪一個會把沒存的修改丟掉。
讓代理動手之前,先有一個回得去的點
人改程式一次改一處,出錯了還記得動過哪裡。代理不是這樣:一個回合它可能讀十幾個檔案、改其中五個,還動到你沒注意的設定,修改散在好幾個檔案裡,復原鍵幫不上忙。
提交(commit)是你自己蓋的存檔點,分支(branch)是一條可以整條丟掉的支線。把這兩件事放進流程,讓代理改程式就變成一個固定循環。
- 開一條分支,主線先保持乾淨
- 動手之前先提交一個檢查點
- 把目標與完成條件講清楚,讓代理去改
- 用 git diff 把改過的每一行看過
- 跑專案自己的測試
- 過了就合併回主線,沒過就整條丟掉
給程式代理的提示模式:先規劃、再實作、最後驗證給程式代理的提示模式:先規劃、再實作、最後驗證和程式代理合作,關鍵不是把需求丟出去,而是把一次任務拆成規劃、實作、驗證三段。這篇依 Anthropic、OpenAI 與 Google 三家官方文件,說明一則好提示詞的四個要素(目標、背景、限制、完成條件)、規劃階段的 Plan Mode 與 /plan、實作階段怎麼限制範圍並要它自己跑測試、驗證階段怎麼看 diff 與逐條核對,附五則可直接複製的範本、常見失敗的追問方式與一張三段式流程圖。閱讀全文
閱讀完整文字說明
一張六步驟的流程圖。上排由左到右是三步:1 開一條分支,指令 git switch -c ai/login,main 先保持乾淨;2 先做一個檢查點,指令 git add -A 與 git commit,這是代理動手前的存檔點;3 讓代理改,把目標與完成條件講清楚,改幾個檔都在這條分支上,這一格是代理在做的事,用藍色標示。接著往下轉到中排,由右到左是三步:4 看它改了什麼,用 git diff 與 git log,一行一行看過再往下;5 跑測試,跑專案自己的測試,沒過就回到步驟 3,圖上用一條虛線箭頭畫出這個回頭的路徑;6 收尾,合併或丟掉二選一,不要留著半成品分支。最後從第六步分成兩條路:測試過了就合併回 main,指令是 git switch main 接 git merge ai/login,再用 git branch -d 刪掉分支;不要了就整條丟掉,指令是 git switch main 接 git branch -D ai/login,main 沒被動過,等於沒發生。
安裝 Git 與第一次設定
macOS 用 Homebrew 或 Xcode 命令列工具,Debian 與 Ubuntu 用 apt,Windows 到 Git 官網下載頁抓安裝程式。裝完用 git --version 確認,查證當天官網列出的最新版本是 2.55.0。
# macOS:Homebrew,或改用 Xcode 命令列工具
brew install git
xcode-select --install
# Debian / Ubuntu(官網列的是 apt-get install git)
sudo apt-get install git
# Windows:到 Git 官網的 Windows 下載頁取得安裝程式
# 裝好了沒
git --version接著設定身分,每個提交都會記下作者是誰。--global 對這台電腦所有儲存庫生效,做一次就好,專案 .git 目錄裡那份設定比全域優先。順便把預設分支設成 main:官方文件說明 git init 的預設分支名稱仍是 master,Git 3.0 才換成 main。
git config --global user.name "你的名字"
git config --global user.email "you@example.com"
git config --global init.defaultBranch main
# 看目前的設定,以及每一條是從哪個檔案來的
git config --list --show-originClaude Code|終端機、路徑與 Git 基礎Claude Code|終端機、路徑與 Git 基礎看懂資料夾位置、切換目錄與版本紀錄。終端機是用文字操作電腦的介面;Shell 則是解讀那些文字的程式。你在 PowerShell 輸入指令,和在 Bash 輸入指令,雖然都像在黑底視窗打字,語法卻不完全相同。使用 Claude Code 前,先學會確認目前路徑、列出檔案與辨認 Git 狀態,已經足夠開始大部分入門練習。閱讀全文
最小循環:init、status、add、commit
git init 會在專案資料夾建立一個空的儲存庫,也就是一個 .git 目錄,加 -b 可指定初始分支名稱。之後的日常只有四個動作:改檔案、git status 看狀態、git add 放進索引、git commit 收成提交。
cd my-project
git init -b main
git status # 哪些改了、哪些已進暫存區、哪些還沒被追蹤
git add README.md # 指定單一檔案
git add -A # 這次的全部變更
git commit -m "第一個提交"git add 的目的地叫索引(index),官方文件也稱它為暫存區(staging area),用來準備下一個提交要放什麼,commit 只收錄索引裡的東西。git commit -a 可省掉 add,但官方寫明它只自動暫存已修改與已刪除的檔案,新檔案不受影響——代理新增的檔案常常就這樣漏掉。
看它改了什麼:git diff 與 git log
代理說「改好了」不等於改對了。git diff 不加參數模型參數(Model Parameters)是什麼模型參數是訓練時調整、用來把輸入轉成輸出的數值,例如權重與偏差。本文用簡單算式示例說明參數如何影響預測,區分模型參數、訓練超參數、提示詞與生成設定,並解釋參數量、數值精度和啟用參數為何是不同指標。讀完能更準確閱讀模型規格,理解參數增加不等於知識逐條增加,也不代表每次聊天都在重新訓練模型。閱讀全文看的是工作目錄相對於索引,也就是還沒 add 的部分;--staged 看索引相對於上一個提交,也就是現在 commit 會提交什麼;HEAD 是兩邊加起來。git log 則是看歷史,官方文件說明 --graph 會在左邊畫出分支與合併的文字圖。
git diff # 還沒暫存的修改
git diff --staged # 已暫存、下一個提交會帶走的修改
git diff HEAD # 相對於上一個提交的全部改動
git diff --stat # 只看哪些檔案各動了幾行
git log --oneline --graph # 一行一個提交,左邊附分支圖
git log -p README.md # 這個檔案每次改了什麼Claude Code|Git、差異審查與 PRClaude Code|Git、差異審查與 PR檢查差異、整理提交與準備 PR。Claude Code 完成功能後,還需要檢查差異、整理提交並決定如何交給他人審查。本篇用待辦專案示範 Git 工作目錄、暫存區與提交的關係,最後準備一份 Pull Request 說明。你會知道測試通過、本機提交、遠端 PR、合併與部署是不同狀態。閱讀全文
AI 寫的程式能信嗎:審查、測試與安全檢查清單AI 寫的程式能信嗎:審查、測試與安全檢查清單代理寫完程式、按下合併之前先做完這張清單:讀 diff 確認改動沒有超出你交代的、跑測試並檢查斷言是不是真的在驗行為、確認相依套件存在且授權可用並鎖定版本、把金鑰與 .env 擋在 repo 外、檢查輸入驗證與注入、把代理的權限縮到最小,最後用 PR 範本、CI 與 Dependabot 固定成流程。依 OWASP、GitHub 官方文件與三家代理的官方安全說明整理,並說明什麼時候該找人審。閱讀全文
開一條分支,改壞了就整條丟掉
git switch -c 會建立一條新分支並切過去,官方文件說它等同於先 git branch 再 git switch。代理在這條分支上做什麼都影響不到主線,要丟也是丟一整條。
git switch -c ai/login # 開一條新分支並切過去
# ……讓代理改,看 diff,跑測試……
git switch main # 回主線
git merge ai/login # 滿意:合併進來
git branch -d ai/login # 已經合併過,安全刪除
git branch -D ai/login # 不要了:強制刪除,沒合併也刪開分支後主線沒有新提交的話,合併只是把主線的指標移過去,官方稱為快轉合併(fast-forward)。衝突時可用 git merge --abort 回到合併前,但官方提醒:開始時若還有未提交的修改,不一定救得回來。
刪分支有兩級:git branch -d 要求已完全合併才肯刪,git branch -D 是 --delete --force 的簡寫,沒合併也照刪。試錯分支確定不要才用 -D。
Claude Code|Git Worktree 平行工作Claude Code|Git Worktree 平行工作隔離多個任務的檔案與分支。Git Worktree 讓同一儲存庫擁有多個工作目錄,各自使用分支與檔案。本篇會把待辦篩選與文件整理分開,確認兩個 session 不會直接改到彼此的檔案,再把其中一個成果整合回主分支。你也會知道何時可以安全清理工作目錄。閱讀全文
三種「還原」差在哪裡
- git restore 換的是檔案內容:預設用索引的版本覆蓋工作目錄,把還沒 add 的修改丟掉;加 --staged 則用 HEAD 覆蓋索引,把已 add 的退出暫存區。
- git reset 動的是分支指向哪個提交:--soft 只移動 HEAD,預設的 --mixed 連索引一起更新、工作目錄保留,--hard 則連工作目錄一起覆蓋。
- git revert 不改寫歷史,而是照舊提交做一個反向的新提交;官方原話是把那些提交帶來的修改反轉過來並記錄成新的提交,它要求工作目錄是乾淨的。
git restore src/app.js # 丟掉這個檔案還沒暫存的修改
git restore --staged src/app.js # 退出暫存區,內容留著
git reset --soft HEAD~1 # 取消上一個提交,修改全留著
git reset HEAD~1 # 同上,但暫存區也清掉(預設 --mixed)
git reset --hard HEAD~1 # 連工作目錄一起回去,修改直接消失
git revert 1a2b3c4 # 新增一個反向提交,歷史留著判準很簡單:還沒提交用 restore,提交了但還沒推出去用 reset,已經推上遠端別人可能拉走了,就只能用 revert。這個分工在官方文件的 revert 說明裡也寫得很清楚。
| 情境 | 用哪個指令 | 會不會丟掉東西 |
|---|---|---|
| 改壞一個檔案,還沒 add | git restore 檔名 | 會。修改被索引的版本蓋掉 |
| 已經 add 了,想退出暫存 | git restore --staged 檔名 | 不會。索引回到 HEAD,內容留著 |
| 上一個提交不對,還沒推 | git reset --soft HEAD~1 | 不會。只有 HEAD 往回一格 |
| 把幾個提交退回未暫存 | git reset HEAD~2 | 修改不丟,但暫存區會清空 |
| 工作目錄整個回到某提交 | git reset --hard 編號 | 會。未提交的修改被覆蓋 |
| 要撤銷的提交已推上遠端 | git revert 編號 | 不會。新增反向提交,歷史留著 |
| 這條試錯分支不要了 | git branch -D 分支名 | 會。沒合併的提交失去入口 |
.gitignore:密鑰與相依目錄不該進儲存庫
.env 與各種金鑰檔、node_modules 這類可重裝的相依目錄、建置產物,都不該進儲存庫。做法是在專案根目錄放一個 .gitignore,官方定義是:指定「刻意不追蹤、Git 應該忽略」的檔案。代理很常 git add -A,這份清單要先寫好。
# 密鑰與環境變數
.env
.env.*
*.pem
*.key
# 可以重新產生的東西
node_modules/
dist/
build/
__pycache__/
# 系統與編輯器
.DS_Store
.idea/最常踩的坑是:.gitignore 只管還沒被追蹤的檔案,官方明講「已經被 Git 追蹤的檔案不受影響」。已經進過提交的檔案,要先用 git rm --cached 從索引移除,再寫進 .gitignore。
git rm --cached .env # 從索引移除,檔案留在硬碟上
echo ".env" >> .gitignore
git commit -m "stop tracking .env"推到 GitHub:remote、push 與憑證
先在 GitHub 建一個空的儲存庫,再把它設成本機的遠端。GitHub 官方文件提醒:建立時不要勾選 README、授權條款或 .gitignore,這些等推上去之後再加。
git remote add origin 你的儲存庫網址
git remote -v # 確認網址對不對
git push -u origin main # 第一次推,順便記住上游分支網址有 HTTPS 與 SSH 兩種,GitHub 官方文件沒有偏好,只說明差別:HTTPS 網址所有儲存庫都有,在防火牆或 Proxy 後面也能用,但要搭配憑證輔助工具;SSH 要先產生金鑰加到帳號。另外 GitHub 已移除 Git 的密碼驗證,走 HTTPS 時填的是個人存取權杖。
# GitHub 建議的演算法
ssh-keygen -t ed25519 -C "you@example.com"
# 舊系統不支援 ed25519 時的替代方案
ssh-keygen -t rsa -b 4096 -C "you@example.com"代理自己的 checkpoint 不能取代 Git
多數程式代理都有自己的還原功能。以 Claude Code 為例,官方文件說明它會在你送出每一個開啟新回合的提示詞之前自動建立檢查點,用 /rewind 叫出選單,可選擇只還原程式碼、只還原對話或兩者。
但範圍有明確邊界,官方文件都列出來了:bash 指令改掉的檔案不會被追蹤;子代理子代理(Subagent)是什麼:把有邊界的工作交出去子代理是由主代理委派特定工作的代理,通常有自己的任務上下文,再把結果交回主代理整合;它不一定使用不同模型,也不必永久保存記憶。本文以社區刊物的資料查核為例,說明交辦範圍、證據格式、同步與背景執行的差別,以及為什麼子代理說完成仍需要驗收。附交接圖與實用檢查表,幫你判斷何時分派能減少負擔。閱讀全文做的修改通常不在這個 session 的檢查點裡,官方直接寫那種情況要用 Git 還原;在 Claude Code 之外手動改的也不算。一個 session 只留最近 100 個檢查點的快照,預設在最後一次存檔約 30 天後清掉。
官方文件那一節的標題就叫「不是版本控制的替代品」:檢查點是為了 session 層級的快速復原,長期歷史與協作還是要用 Git。分界線很好記——那個狀態你想留到明天,就 commit。
Claude Code|Checkpoint 與 /rewindClaude Code|Checkpoint 與 /rewind區分回復對話、回復檔案與 Git 還原。Checkpoint 與 /rewind 可以在 Claude Code 工作階段內回到先前的對話或受追蹤檔案狀態。本篇會用一個主標題修改練習三種還原選擇,並說明哪些變更不在範圍內。你會知道它適合快速回復局部嘗試,但不能代替 Git、資料備份或外部操作的補救流程。閱讀全文
Codex CLI 入門:在終端機裡讓 OpenAI 幫你改程式Codex CLI 安裝與入門選擇自己的安裝平台,完成 CLI 登入、唯讀檢查、單行修改、獨立驗證與工作階段接續。包含可重做的兩檔練習與缺檔測試。閱讀全文
同主題延伸閱讀
生活分享
Claude Code、Codex 搭本機模型:兩種接法怎麼選
Claude Code 與 Codex 搭配本機模型有兩種接法:代理照常連雲端、把大量雜務交給腳本或 MCP 工具去問本機模型,或是把代理的模型整個換成本機模型。這篇用資料能不能出門、上下文開得夠不夠長、工作的類型三個問題幫你選,並對照 Ollama、LM Studio、Anthropic 與 OpenAI 的官方文件,分清楚本機權重、Ollama 的 cloud 標籤與供應商端點是三種不同的東西。
生活分享
把本機模型包成 MCP 工具,Claude Code 與 Codex 共用一支伺服器
用官方 Python SDK 寫一支 stdio 的 MCP 伺服器,把本機的 Ollama 模型包成工具,Claude Code 與 Codex 就能共用:工具只收 inbox 底下的路徑,只回分類結果與結果檔路徑,不回信件原文。文中列出兩邊的登記指令、逾時與輸出上限的官方預設值,以及換成別家本機模型只改環境變數 LOCAL_MODEL 的做法,步驟都來自官方文件。
生活分享
把 Claude Code、Codex 整個換成本機模型:Ollama 與 LM Studio 設定與還原
Ollama、LM Studio 與 Codex 的文件寫了把 Claude Code、Codex 整個換成本機模型的接法:Ollama 用 ollama launch 一行指令或手動設定,LM Studio 先開本機伺服器再設環境變數或加 --oss。這篇把四種組合的指令、兩家文件建議的上下文長度、Claude Code 用 /status 確認連到誰的方法,以及用完怎麼還原整理在一起;需要先裝好 Ollama 或 LM Studio,並且已有 Claude Code 或 Codex。
生活分享
Claude Code、Codex 搭本機模型的注意事項:開工前的檢查清單
Claude Code 或 Codex 搭本機模型之前,先照一張表逐項核對:代理讀不讀得到原始檔、現在連的是誰、標籤是不是 :cloud、上下文實際開多長、逾時與輸出量、怎麼驗收。每一項寫怎麼檢查,並指出詳見同組哪一篇,另外收進供應商端點、條款與授權、繁體中文用字檢查;檢查方法取自 Anthropic、OpenAI、Ollama 與 DeepSeek 的官方文件。
引用本文的文章
最新旅遊情報攻略

情報
2026 韓國楓葉預測:雪嶽山 10 月 20 日、首爾近郊 10 月底、內藏山與漢拏山 11 月上旬
韓國山林廳 2026 年 9 月 22 日公布的楓紅高峰預測:雪嶽山 10 月 20 日,春川、國立樹木園到首爾植物園落在 10 月 28 日到 11 月 2 日,內藏山 11 月 4 日、漢拏山 11 月 6 日,整體比最近 5 年晚約 0.8 天。整理各地楓樹與銀杏的預測日、首爾出發怎麼排,以及出發前去哪裡看即時楓況。2026 年 10 月查證。
- 季節活動
- 自然
- 觀景

攻略胡志明市
胡志明市到頭頓一日遊:白藤碼頭搭高速船、船票與班次,下船就是胡梅纜車與耶穌基督像
人在胡志明市挪一天去頭頓看海:市中心的白藤高速船碼頭搭船,航程 120 分鐘到頭頓的胡梅碼頭,平日成人 320,000 越南盾、週末 350,000,回程末班平日 15:00。下船就是胡梅纜車站,同一條路上有白宮,小山頂上是耶穌基督像。平日一天只有兩班船,整天要從末班船倒推著排。
- 交通
- 行程範例
- 海灘

攻略沖繩
沖繩不開車攻略:單軌只到浦添,美麗海水族館要坐兩個多小時的巴士,回那霸的最後一班直達車 17:22 就開走
不租車的沖繩怎麼移動:那霸市區靠沖繩都市單軌電車(ゆいレール),那霸機場站到終點てだこ浦西 19 站、17 公里、37 分鐘,一日券 1,000 日圓;美麗海水族館有那霸機場直達的高速巴士,單程 2,000 日圓起、官方時刻表上 2 小時上下,下車後還要走 10 分鐘;古宇利島要在今帰仁村役場轉車,當天來回光坐車就六個半小時;回程的最後一班直達車 17:22 就從記念公園前開走(2026 年 9 月查證)。
- 交通
- 行程範例
- 預算
資料來源
- Git 官方文件 git config 首次設定(Pro Git:user.name、user.email 與設定層級) · 查證日期:
- Git 官方網站安裝頁(各系統安裝方式與目前版本) · 查證日期:
- Git 官方文件 git-init(建立 .git 目錄與 --initial-branch 預設值) · 查證日期:
- Git 官方文件 git-status(顯示哪些會提交、哪些要先 add) · 查證日期:
- Git 官方文件 git-add(索引即暫存區的定義) · 查證日期:
- Git 官方文件 git-commit(-m 與 -a 的行為與限制) · 查證日期:
- Git 官方文件 git-diff(無參數、--staged、HEAD 與 --stat 各看什麼) · 查證日期:
- Git 官方文件 git-log(--oneline、--graph 與 -p) · 查證日期:
- Git 官方文件 git-switch(-c 建立並切換分支) · 查證日期:
- Git 官方文件 git-branch(-d 與 -D 的差別) · 查證日期:
- Git 官方文件 git-merge(快轉合併與 --abort) · 查證日期:
- Git 官方文件 git-restore(預設從索引還原工作目錄、--staged) · 查證日期:
- Git 官方文件 git-reset(--soft、--mixed、--hard 各動到什麼) · 查證日期:
- Git 官方文件 git-revert(反向提交,與 reset、restore 的分工) · 查證日期:
- Git 官方文件 gitignore(定義、優先序與已追蹤檔案不受影響) · 查證日期:
- GitHub 官方文件:把本機既有的程式碼加到 GitHub(remote add 與 push -u) · 查證日期:
- GitHub 官方文件:關於遠端儲存庫(HTTPS 與 SSH 網址、密碼驗證已移除) · 查證日期:
- GitHub 官方文件:產生新的 SSH 金鑰(建議的演算法) · 查證日期:
- GitHub 官方文件:從儲存庫移除敏感資料(第一步是撤銷或輪替機密) · 查證日期:
- Claude Code 官方文件:Checkpointing 與 /rewind(範圍、限制與不是版本控制替代品) · 查證日期: