Claude Code Checkpoints 完整教學 — 按兩下 Esc,把 AI 搞壞的東西倒回去
先講那個讓所有人都心臟漏一拍的時刻。
你讓 Claude 改一個功能,它跑得很順,改了七八個檔案。你一邊看一邊覺得不太對,但又說不上來哪裡怪,於是讓它繼續。再過二十分鐘,你發現整個方向錯了——它把一個本來好好的模組重構成你完全不想要的樣子,而且中間還順手動了三個你根本沒叫它碰的檔案。
這時候你想回到二十分鐘前那個「還沒壞」的狀態。問題是,怎麼回?
舊做法:你得自己當那個記得存檔的人
倒回到 Checkpoints 出現之前,這件事的標準流程是這樣的。
你得在每次讓 AI 動手前,自己先 git stash 或 git commit 一下,幫自己留個退路。改壞了,再 git reset --hard 或 git checkout 把檔案拉回來。聽起來不難,對吧?難的地方在於——你得「記得」。你得在每一個還沒出事的時刻,預判它等一下可能會出事,然後手動留下存檔點。
這就像玩一個沒有自動存檔的老遊戲。打 Boss 前你要記得按存檔,忘了按,死了就從頭來。問題是寫 code 的時候,你的注意力全在「這樣改對不對」上面,誰會分神去想「我要不要先存個檔」?於是真正出事的那一次,往往就是你忘了存檔的那一次。
更麻煩的是,git 救得回檔案,救不回對話。你 reset 了程式碼,但 Claude 腦袋裡那串「我們剛剛討論到哪、為什麼這樣決定」的脈絡還停在壞掉的那一刻。檔案回去了,AI 的記憶沒回去,兩邊對不上,你還得花一輪把它的認知掰回來。
新做法:它自己在每次動手前偷偷存檔
Checkpoints 把這件事整個翻過來。你不用記得存檔了,因為它一直在幫你存。
機制很單純:Claude 每次要改檔案之前,會自動把它準備動的那些檔案的當下狀態拍一張快照;每一次你送出 prompt,它也會留一個點。這整件事是透明的——你不會看到它在存檔,就像那個老遊戲突然變成每打一下就自動存一次,你什麼都不用做,存檔點已經一路鋪好在你身後了。
要倒帶的時候,打 /rewind,或者更快——在輸入框空著的時候,按兩下 Esc。倒帶選單就跳出來,把這個 session 走過的每一個存檔點列給你,你挑哪一個,就回到那一刻。
打個比方,這就像影片的時間軸。以前你要回到某一秒,得自己事先在那一秒做記號;現在整條時間軸都在,每一格都點得到,你只是把游標拖回去而已。
對照之後,差距其實不在「能不能倒」,在「倒得多細」
真正把這兩種做法的距離拉開的,是倒帶選單裡的選項。git reset 是一刀切——檔案全部回到某個 commit,沒得商量。Checkpoints 給你的是三選一:
- 倒回程式碼和對話:兩個都還原,整個 session 乾乾淨淨回到那一刻,當作剛剛那段沒發生過。
- 只倒回對話:把對話拉回那則訊息,但程式碼維持現在的樣子。適合你覺得「code 我想留,但 Claude 的理解跑歪了,想讓它從那句話重新想一次」。
- 只倒回程式碼:檔案還原,但對話保留。適合「這次的改法不行,但我們剛剛的討論很有用,別丟」。
你發現沒有,這三個選項背後藏著一個前面 git 解不掉的東西——它終於把「程式碼」和「對話」當成兩條可以分開倒的軸了。出事的時候,壞掉的有時是 code,有時是 AI 的理解,有時兩個一起壞。能分開倒,你才救得準,而不是每次都把好的跟壞的一起推倒重來。
選單裡還有兩個更進階的、跟 context 有關的選項,叫 summarize。「Summarize from here」會把你選的那則訊息「之前」的留著、「之後」的全部壓縮成一段摘要;「Summarize up to here」剛好相反,把「之前」的壓成摘要、「之後」的留著。這兩個不是拿來救災的,是拿來省 context 的——當對話拖太長、AI 開始變鈍,你可以把不重要的那一段折疊掉,騰出空間給真正在想的事。
這條邊界你要是不知道,遲早會踩雷
講到這裡聽起來太美好了,所以得用力講一下它的天花板在哪——這也是費曼式的誠實:一個工具最重要的,往往是它「做不到」的那一塊。
Checkpoints 只追蹤 Claude 透過它自己的檔案編輯工具做的修改。 它不追蹤 bash 指令動過的檔案。也就是說,如果 Claude 是用 rm、mv、cp 去刪檔、搬檔、覆蓋檔,這些動作 /rewind 救不回來。
這個邊界一定要刻進腦子裡,因為它違反直覺。你以為「自動存檔」就是什麼都存,結果不是——它存的是「編輯」,不是「在 shell 裡發生的事」。一個 rm -rf 跑下去,倒帶選單裡看起來該倒的都在,你倒回去,那個被刪的檔案還是不會回來。會把人害慘的,正是這種「我以為它保我、其實它沒保」的盲區。
所以正確的心智模型是:Checkpoints 是你的近端安全網,接住 AI 在編輯層面的失手;git 還是你的遠端保險,接那些 bash 指令、跨 session、或者你真的要長期留存的版本。兩個不是誰取代誰,是各守一段。順帶一提,存檔點會跨 session 留著,三十天後自動清掉——它是救急用的短期記憶,不是給你當版本控制系統使的。
收尾:它真正改掉的,是你腦袋裡那條「先存檔」的弦
回到最前面那個心臟漏一拍的場景。
以前你會學乖——被 AI 改爛過幾次之後,你養成一個習慣:每次動手前先 commit。這個習慣很好,但它有成本,成本就是你得一直分一條神經出來「記得存檔」。那條神經一直繃著,你才安心放手讓 AI 去跑。
Checkpoints 真正拿掉的,不是某個指令,是那條繃著的弦。當你知道身後每一步都自動鋪好了存檔點,按兩下 Esc 就能回到任何一刻,你才敢真的放手——讓 Claude 大刀闊斧去改,反正錯了三秒就能倒回來。這種「敢放手」的狀態,才是它給你的東西。不是少打幾個 git 指令,是把「怕它搞砸」這件事,從你的決策裡刪掉。
今天就去試一個小實驗:開一個專案,讓 Claude 隨便改點東西,然後按兩下 Esc,看看那條時間軸長什麼樣子。但記得——下次它要跑 rm 之前,你還是得自己先 commit。那一塊,它真的不保。
參考來源:










