代理是真的在改檔案,有時候還會改錯地方。不是壞掉了,只是它對任務的理解和您想的不一樣。好消息是,程式碼快照由 Claude Code 自己拍,不用您動手,而失敗的嘗試只要按幾下就能倒回去。

比較不妙的消息是,這些快照有邊界。代理寫進檔案裡的每一筆改動,都發生在受保護的範圍之內,從那裡都能救回來。凡是繞過這個範圍的,就在圍籬外面:快照沒看過,也就救不回來。圍籬畫在哪裡,最好提前弄清楚,別等到東西不見了才發現。

下面就來看:回溯是怎麼運作的、圍籬畫在哪裡、能保留多久,以及圍籬外的東西該靠什麼來補。

什麼是 checkpoint

Checkpoint 是代理準備要修改的那些檔案,在它動手之前拍下的快照。它不是專案的備份,也不是版本歷史裡的一筆記錄,而是目前工作階段內,也就是您和代理這段對話裡的一個工作用復原點。

這一節最值得記住的一點是:快照會在您每次送出訊息前自動產生。您不用建立它,不用設定它,也不會忘記觸發它。訊息一送出,這個點就已經存在了。

  • 您的訊息
  • 程式碼快照
  • 代理的修改
  • 新的訊息
  • 新的快照

請留意順序:先有快照,才有修改。正因為如此,回到某個點的意思就是"把程式碼還原成這則訊息之前的樣子"。您選的不是某個時間點,而是自己送出的某一則具體訊息,之後的一切都要被撤銷。

再補充一點,讓後面的內容更好理解。Checkpoint 針對的是程式碼。Claude Code 也能把對話倒回去,但那是選單裡另一個獨立的選項:程式碼和對話要一起回溯,還是分開回溯,由您決定。

怎麼打開回溯選單

入口有兩個,做的都是同一件事:

  • 在輸入欄打 /rewind 指令。它還有常見的別名 /undo 和 /checkpoint;
  • 輸入欄是空的時候,按 Esc Esc 鍵。
選單沒有打開的話

多半是輸入欄裡還有文字。這種情況下,第一次按 Esc Esc 只會清掉打好的字,選單不會出現。文字並不會不見:它會進到輸入歷史裡,按向上鍵就能叫回來。等輸入欄空了之後再按一次 Esc Esc,選單就會打開。

打開的是這個工作階段裡您送出的訊息清單。不是檔案清單,也不是時間軸,而是實實在在的訊息,您送出的每一則都有一行。您要選的是"從哪一則之後,事情就開始走偏了"。

有個特殊情況:如果您在同一個仍在執行的代理裡,之前用過 /clear,較新的版本會在清單最上面多出一行。選它可以回到清空之前的那段對話。可見,清空並不會把什麼燒掉。

選單提供哪些選項

選好點之後,代理會問您到底要拿它怎麼辦。一共六個選項:

選單項目作用
Restore code and conversation把程式碼和對話一起還原到選定的點
Restore conversation只還原對話,檔案維持原樣
Restore code只還原檔案,對話維持原樣
Summarize from here把這個點之後的對話收合成摘要
Summarize up to here把到這個點為止的對話收合成摘要,之後的部分維持原樣
Never mind什麼都不做,直接關掉選單

關於這張表,第一件該知道的事是:選單的內容會變。跟程式碼有關的兩個項目,只有在選定的點之後代理真的改過檔案時才會出現。沒改過就沒東西可還原,那幾行自然不會出現。所以就算選單裡只有四項而不是六項,您用的還是同一套程式。

Summarize 這兩行比較特別。它們處理的不是程式碼,而是對話的長度:把一段對話收合成簡短的摘要,原則上碰不到磁碟上的檔案。這麼做的用處是另一個很大的話題,這裡只要知道它不是回溯、也不能用這種方式救回程式碼就夠了。

還有個省心的小細節。還原對話之後,那則訊息的內容會回到輸入欄裡。不用回想自己寫了什麼再重打一次,調整一下措辭就能再送一次。

回溯救得回什麼,救不回什麼

在自己的範圍裡,回溯很可靠。它能救回兩樣東西:代理用自己的編輯工具做出的檔案修改,以及這個工作階段裡的對話紀錄。

而留在圍籬外面的是這些。

  • 終端機指令造成的變動。代理不只會改檔案,也會執行指令。如果檔案是被 rm 指令刪掉、被搬移,或是被複製覆蓋掉的,快照根本沒看過這件事,自然救不回來。
  • 繞過代理發生的變動。代理在這個工作階段沒碰過的檔案,回溯完全不會去動:您自己在編輯器裡改過、被別的程式覆寫過、旁邊還有另一個工作階段在動它 - 這些都會維持原樣,透過選單既救不回也撤不掉。但如果您手動改過的檔案,代理也編輯過,還原程式碼就會把整個檔案連同您的修改一起,退回快照時的樣子。
  • 符號連結檔案這種少見情況。這類檔案回溯會直接跳過,並老實地用單獨一行寫清楚。真的遇到了再處理就好,不用預先準備。
改檔案和跑終端機指令,是兩回事

從外面看,兩者的差別幾乎看不出來。不管是編輯了檔案,還是執行了刪掉檔案的指令,代理回報的口氣一樣平靜。對您來說,螢幕上是兩則長得很像的訊息;但對回溯來說,這是本質上不同的兩件事 - 前者救得回來,後者救不回來。

所以要求執行刪除、搬移或覆寫的指令,值得比一般的修改請求讀得更仔細一點。那正是背後的安全網已經不在的時刻。

簡單說就是:回溯盯的是代理寫進檔案裡的內容,不是電腦上發生的所有事情。

回溯能保留多久

快照不會無止盡地累積。選單裡的點會全部列出來,但檔案快照只保留最近一百筆:對一段對話來說已經很夠用,但不是無限,舊的會漸漸被擠掉。

不過這些點不綁定在開著的終端機視窗上。它們跟著工作階段一起保存,所以您可以關掉終端機、隔天再回來、接著同一段對話 - 回溯選單照樣能用,就像什麼都沒發生過一樣。

當然也不會永遠留著。工作階段和它的快照大約一個月後就會自動清掉,這個期限想改的話也能自行設定。

由此得出一個簡單的結論:回溯適合單一任務的時間範圍 - 幾分鐘、幾小時、和代理的一段對話。它不是設計來當專案歷史的儲存庫,這不是缺點,只是分工不同。要撐更長時間的方法,接下來再談。

四種保險,各有各的分工

復原、快照、資料夾複本、版本歷史,不是同一件事的四種說法。它們涵蓋的時間長短不一樣,能防的損失類型也不一樣。

保險誰建立保存什麼能保留多久哪裡無力
編輯器裡的復原您,按一下開啟中檔案裡您最近的修改不長,看編輯器而定同時涉及多個檔案的修改,通常也涵蓋繞過編輯器直接寫進磁碟的內容
CheckpointClaude Code,自動您每次送出訊息之前的程式碼跟著工作階段,一百個點終端機指令、繞過代理發生的變動
資料夾複本您,手動複製那一刻的整個專案不刪就一直在看不出改了什麼,還會把磁碟塞滿
版本歷史,git您,有意識的操作專案的一個個狀態,依序排列跟著專案一起存在您沒來得及記錄進去的部分

選保險,要先看涵蓋範圍,再看能保留多久。如果 Claude 只用自己的編輯工具改一般檔案,沒碰到工作階段以外的東西,五分鐘的實驗用 checkpoint 就夠了。如果工作裡有終端機指令或外部變動,不管時間多短,光靠 checkpoint 都不夠。只有在涵蓋範圍合格的保險裡,才輪到看時間長短:好幾天的工作,或是重要的里程碑,需要不依賴和代理對話的機制。

關於資料夾複本,話要說清楚。當作做危險事情前的一次性防護,它是管用的:複製一份,放手去改,出問題就換回去。但當成一套機制就撐不住了。一週後您會有好幾個幾乎一模一樣的資料夾,哪個才是最新的,已經沒人記得了。

表格最後一行,是唯一能同時做到長期保存狀態、又能顯示中間到底改了什麼的方式。這就是 git,它本身是一個獨立的大主題:有自己的工具、自己的一套指令,這裡不深入展開。只要理解它在表裡的位置就夠了 - 時間範圍最長,也是回溯照顧不到的地方唯一的防線。

這對工作方式有什麼影響

重點不在按鈕多不多。回溯在實務上帶來的是這些:

  • 快照自動產生,但幾乎不用成本的,只有透過 Claude 自己的編輯工具改一般檔案的實驗。要是會用到終端機指令或工作階段外的變動,請先選別的保險;
  • 代理不會替您決定要不要回溯。它可以說自己走錯方向了,但打開選單、按下選擇的人是您;
  • 要求執行終端機指令,和要求修改檔案,是不同類別的動作。前者回溯救不了,後者救得了。差別只在請求的文字裡看得出來,這也是為什麼值得讀仔細;
  • 步驟走得越大,回溯的用處就越小。救是救得回來,但代理做的事越多,光看一個選單想弄清楚到底救回了什麼就越難。小步前進在這裡一樣占優勢;
  • 回溯和版本歷史不是互相競爭的關係。前者處理一段對話裡的幾分鐘、幾小時,後者處理專案的幾天、幾週和里程碑。
大改動之前的一分鐘

在真正有風險的操作之前,花一分鐘用比工作階段更長壽的方式把狀態固定下來,是值得的。現在您手上能用的是資料夾複本 - 當作冒險前的一次性防護,它是老實可靠的。

但真正該用的工具是 git。它能想存多久就存多久,還能顯示中間到底改了什麼,也不會用一堆幾乎一樣的資料夾把磁碟塞滿。怎麼用它,我們另外再談,這是個大主題,值得單獨講一次。至於冒險前先停一分鐘的習慣,不管有沒有 git,現在都用得上。

回溯選單就留給快速的實驗用吧:當成最後一道防線用,效果明顯不如當成日常工具來用。


回溯選單的內容和保留期限,會隨 Claude Code 的版本和設定而不同,所以您看到的可能和這裡描述的不一樣。您的版本提供什麼,選單本身永遠會告訴您。