跳到主要內容
← 回找觀念
第五架構:防禦控制與 Git 安全網|第 1 篇

不會寫程式也要懂的 Git:存檔與還原

AI 問你「要不要 commit?」時,你要知道那是在問「要不要存檔」。三個動作就夠:commit 存檔、restore 丟掉還沒存的修改、revert 用一個新存檔抵消舊存檔。Claude Code 另外有 /rewind 可以退回對話前的狀態,但它不追蹤所有改動,不能取代 Git。

2026-07-29 發布 · 2026-09-16 更新 · 作者整理:Lucas

用 AI 寫東西的時候,它會突然問你一些聽起來像外星文的事:「要不要 commit?」「要開一個 branch 嗎?」不是工程師的人看到這些,第一反應常是不敢按,怕按錯把專案弄壞。

這些字都指向同一個東西:Git,一套幫檔案記錄每個版本的工具。你不需要背指令,但要懂三個觀念,因為它們是你跟 AI 協作時的遊戲存檔。AI 把東西改壞的時候,你靠這個讀檔。

Git 安全網三件事

Commit

建立本機安全存檔點。

Restore

把未提交的改壞內容拉回來。

Revert

用新提交抵消已提交的錯誤。

commit 是存檔,push 是上傳,.gitignore 是「這些不准上傳」

先分清兩個東西。Git 在你的電腦上管檔案版本;GitHub 是雲端的倉庫,放副本、給別人看。你可以只用 Git 不用 GitHub,反過來不行。

commit 就是存檔點。AI 幫你做好一個能動的東西(例如登入頁面),這時候說「幫我 commit」。它會把目前所有檔案的狀態封存成一個點,之後不管 AI 怎麼改壞,你都能回到這個點。習慣是每做好一個小東西就存一次,不要等到一大包才存。存檔點越密,能退的位置越多。

push 是上傳到雲端。存了檔之後才有東西可以上傳,上傳的意義是備份和分享。

.gitignore 是一份「這些檔案不准追蹤、不准上傳」的清單。在 push 之前一定要有這個檔。裡面至少要列 .env,放 API 金鑰和密碼的那個檔。金鑰跟著程式一起上了公開的 GitHub,等於把家門鑰匙貼在門口,這是一旦發生就收不回來的事。hook 擋金鑰那篇會講怎麼用工具自動擋。

AI 改壞了:還沒存檔用 restore,存了檔用 revert

AI 把東西改壞是日常,不是意外。遇到的時候不用逐行找問題,直接讀檔。兩種情況。

還沒 commit:說「restore」。AI 剛改了一堆檔案,你一跑發現壞了,而這批修改還沒存檔。對它說:「剛才的修改我不要了,restore 回上一個存檔點。」它會執行 git restore,所有未存檔的變動消失,回到乾淨的起點。這個動作是不可逆的,被丟掉的修改回不來,所以確定不要了再說。

已經 commit 了:說「revert」。你存了檔才發現這版是錯的。對它說:「把剛才那個 commit revert 掉。」它會執行 git revert,產生一個新的存檔點,內容是把那次修改反過來。歷史紀錄裡兩個點都在,一個「改錯了」、一個「改回來了」。這在團隊裡很重要,沒有人的進度會憑空消失,每個人都看得到發生了什麼。

Claude Code 的使用者還有第三個工具:/rewind,或按兩下 Esc。它會列出你這場對話裡每一次送出的訊息,讓你選一個點,把程式碼、對話、或兩者退回那時候的狀態。這比 Git 快,適合「剛剛那三步我不要了」。但要知道它的限制,官方文件寫得很清楚:它只追蹤 AI 用編輯工具改的檔,用指令列刪掉、搬走的檔(rm、mv、cp)不追蹤;子代理改的通常也不追蹤;而且它是這一場的快速復原,不是版本控制的替代品,長期的歷史還是靠 Git。

動手做

從沒用過 Git、專案在本機的,一句話交給 AI:

幫我把這個專案放進 Git:
1. 建立 .gitignore,至少排除 .env、*.key、*.pem、node_modules 或其他套件資料夾。
2. 做第一個 commit,訊息寫「初始版本」。
3. 告訴我:以後我說「存檔」你就 commit,說「上一步不要了」你就 restore,說「那個存檔是錯的」你就 revert。每次做這三件事之前先告訴我你要做什麼,做完告訴我結果。
4. 不要 push 到任何地方,除非我明確說要。

有 Git 了、想練習還原的,故意改壞一次再救回來。叫 AI 做一個小修改(例如改一個標題),確認能動,說「存檔」。再叫它做一個修改,然後說「上一步不要了,restore」,看檔案是不是回來了。最後再改一次、存檔、然後說「那個存檔是錯的,revert」,看歷史裡是不是多了一個「改回來」的點。做過一輪,你以後就不怕這三個字了。

不想看終端機的,GitHub Desktop 這類有圖形介面的工具可以按按鈕做 commit 和 revert,觀念完全一樣。

做對了的樣子:你能用自己的話說出 commit、restore、revert 的差別(存檔、丟掉沒存的、用新存檔抵消舊的);每做好一個小功能就有一個 commit,不是一天一個;.gitignore 裡有 .env;你做過一次 revert,看過歷史裡那個「改回來」的點。

今天最該做的一件事:打開你目前的專案,看有沒有 .gitignore,裡面有沒有 .env。

commit 是存檔點,做好一個小東西就存一次。還沒存,restore 丟掉(不可逆);存了,revert 用新存檔抵消(歷史都在)。.gitignore 裡一定要有 .env。/rewind 很方便,但它不追蹤所有改動,也不取代 Git。

站內延伸

來源: git-restore、git-revert(官方文件);Claude Code:Checkpointing(/rewind、Esc Esc、不追蹤指令列改動、不是版本控制的替代品)。

第五架構 · 第 1 篇 · 存檔還原

它改壞是日常,
你要會讀檔

什麼時候看這張:它問你「要不要存檔」,你不敢按,怕按錯把專案弄壞。

還沒存檔整批修改直接丟掉回到乾淨的起點丟掉就回不來了已經存了用新的一筆抵消掉兩個紀錄都留著誰的進度都沒少
  • 做好一個小東西就存一次,存得越密能退的位置越多
  • 金鑰跟著程式上了公開的倉庫,就收不回來
  • 對話裡的快速倒帶很方便,但它不追蹤所有改動

第一個動作打開你目前的專案,看那份「不准上傳」的清單裡有沒有金鑰檔。沒有就補上,三分鐘。

2026-09-16 查證稜線 Ridgeline
← 看更多找觀念文章
取得 AI 實戰工具與更新

之後會不定期整理:新方法、指令包(Prompt Pack)、Checklist 與模板。免費、無廣告;送出後會收到一封確認信,點了連結才算訂閱成功,之後每封信都附一鍵退訂。