8 8
9Claude Code 會自動追蹤 Claude 在您工作時所做的檔案編輯,讓您可以快速撤銷變更並回溯到先前的狀態,以防任何事情出現偏差。9Claude Code 會自動追蹤 Claude 在您工作時所做的檔案編輯,讓您可以快速撤銷變更並回溯到先前的狀態,以防任何事情出現偏差。
10 10
11## Checkpointing 的運作方式11## 檢查點的運作方式
12 12
13當您與 Claude 合作時,checkpointing 會自動捕捉每次使用者提示開始一個回合前的程式碼狀態。13在您與 Claude 協作時,檢查點功能會在您送出每個開啟新回合的提示詞之前,自動擷取程式碼的狀態。
14 14
15### 自動追蹤15### 自動追蹤
16 16
17Claude Code 追蹤由其檔案編輯工具所做的所有變更:17Claude Code 會追蹤其檔案編輯工具所做的所有變更:
18 18
19* 每個使用者提示開始一個回合都會建立一個新的 checkpoint19* 您送出的每個開啟新回合的提示詞都會建立一個新的檢查點
20* Claude Code 在一個會話中保留最近 100 個 checkpoint 的檔案快照。捨棄較舊的 checkpoint 會刪除沒有其他 checkpoint 參考的快照檔案,除了每個檔案的第一個快照,VS Code 擴充功能將其用作會話差異的基準。20* Claude Code 會在一個工作階段中保留最近 100 個檢查點的檔案快照。捨棄較舊的檢查點時,會刪除任何剩餘檢查點都不再參照的快照檔案,但每個檔案的第一個快照除外,因為 VS Code 擴充功能會將其作為工作階段差異的基準。
21* Claude Code 將 checkpoints 與對話一起儲存,因此您可以在恢復會話後仍然執行 `/rewind`21* Claude Code 會將檢查點與對話一起儲存,因此在您恢復工作階段後,仍然可以執行 `/rewind`
22* Claude Code 在[保留掃描](https://code.claude.com/docs/zh-TW/claude-directory.md#cleaned-up-automatically)中刪除會話的檔案快照,預設情況下約在會話最後一次儲存後 30 天。回溯到快照已消失的 checkpoint 可能會失敗,並出現 [`No files were restored`](https://code.claude.com/docs/zh-TW/errors#no-files-were-restored) 錯誤。若要保留快照更久,請設定 [`cleanupPeriodDays`](https://code.claude.com/docs/zh-TW/settings-reference#cleanupperioddays)。22* Claude Code 會在[保留期清理](https://code.claude.com/docs/zh-TW/claude-directory.md#cleaned-up-automatically)中刪除工作階段的檔案快照,預設大約在該工作階段最後一次儲存快照的 30 天後進行。倒轉至快照已被刪除的檢查點時,可能會失敗並顯示 [`No files were restored`](https://code.claude.com/docs/zh-TW/errors#no-files-were-restored)。若要將快照保留更久,請設定 [`cleanupPeriodDays`](https://code.claude.com/docs/zh-TW/settings-reference#cleanupperioddays)。
23 23
24### 回溯和總結24### 倒轉與摘要
25 25
26執行 `/rewind`,或在提示輸入為空時按兩次 `Esc`,以開啟回溯選單。26執行 `/rewind`,或在提示詞輸入框為空時按兩次 `Esc`,即可開啟倒轉選單。
27 27
28> [!NOTE]28> [!NOTE]
29>29>
30> 如果提示輸入包含文字,雙 `Esc` 會清除它而不是開啟選單。清除的文字會儲存到您的輸入歷史記錄中,因此在您完成回溯選單後,按 `Up` 可以召回它。30> 如果提示詞輸入框中有文字,按兩次 `Esc` 會清除文字,而不是開啟選單。被清除的文字會儲存至輸入歷史記錄中,因此在倒轉選單中完成操作後,可以按 `Up` 將其叫回。
31 31
32回溯選單列出您在工作階段期間傳送的提示詞。選擇您想要操作的點,然後選擇一個動作:32倒轉選單會列出您在工作階段中送出的提示詞。選取您要操作的時間點,然後選擇一個動作:
33 33
34* **恢復程式碼和對話**:將程式碼和對話都回復到該點34* **Restore code and conversation**:將程式碼和對話都還原至該時間點
35* **恢復對話**:回溯到該訊息,同時保持目前程式碼35* **Restore conversation**:倒轉至該訊息,同時保留目前的程式碼
36* **恢復程式碼**:回復檔案變更,同時保持對話36* **Restore code**:還原檔案變更,同時保留對話
37* **從此處總結**:將此點之後的對話壓縮為摘要,釋放 context window 空間37* **Summarize from here**:將從此時間點之後的對話壓縮成摘要,以釋放上下文視窗空間
38* **從此處之前總結**:將此點之前的對話壓縮為摘要,保持後續訊息完整38* **Summarize up to here**:將此時間點之前的對話壓縮成摘要,並完整保留之後的訊息
39* **算了**:返回訊息清單而不進行任何變更39* **Never mind**:返回訊息清單,不做任何變更
40 40
41兩個程式碼還原選項只在所選 checkpoint 有追蹤的檔案變更可以回復時出現。如果該點之後沒有捕捉到檔案編輯,選單只會提供**恢復對話**、總結選項和**算了**。41只有在所選檢查點有可還原的已追蹤檔案變更時,才會出現這兩個程式碼還原選項。如果在該時間點之後沒有擷取到任何檔案編輯,選單只會提供 **Restore conversation**、摘要選項以及 **Never mind**。
42 42
43恢復對話或選擇「從此處總結」後,所選訊息的原始提示會恢復到輸入欄位中,以便您可以重新傳送或編輯它。43還原對話或選擇 Summarize from here 後,所選訊息中的原始提示詞會被還原至輸入欄位,方便您重新送出或加以編輯。
44 44
45選擇「從此處之前總結」會讓您留在對話末尾,輸入為空。使用任一總結選項,**已總結對話**標記會出現在對話中被壓縮訊息的位置。45選擇 Summarize up to here 會讓您停留在對話的結尾,且輸入框為空。無論使用哪一個摘要選項,對話中原本被壓縮訊息所在的位置都會出現一個 **Summarized conversation** 標記。
46 46
47#### 如果您在下一個提示詞之前退出,已回溯的訊息可能會重新出現47#### 若在下一個提示詞之前退出,被倒轉的訊息可能會再次出現
48 48
49若要再次移除重新出現的訊息,請在該工作階段中執行 `/rewind` 並選擇相同的提示詞,然後選擇**恢復對話**。在退出之前,請傳送一個提示詞給 Claude,因為 Claude Code 會將回溯後的對話與該提示詞一起儲存。您已還原的檔案會維持回溯後的狀態。49若要再次移除這些重新出現的訊息,請在該工作階段中執行 `/rewind` 並選取相同的提示詞,然後選擇 **Restore conversation**。在退出之前,請先向 Claude 送出一個提示詞,因為 Claude Code 會將倒轉後的對話與該提示詞一起儲存。您已還原的檔案會維持倒轉後的狀態。
50 50
51#### 回溯過去已清除的對話51#### 倒轉至已清除的對話之前
52 52
53如果您在同一個 Claude Code 程序中較早執行了 `/clear`,回溯選單會在清單頂部顯示一個額外的項目,標記為 `/resume <session-id> (previous session)`。選擇它以恢復在 `/clear` 執行前活躍的對話。該項目在您退出 Claude Code 或恢復不同會話之前可用。53如果您稍早在同一個 Claude Code 程序中執行過 `/clear`,倒轉選單會在清單頂端顯示一個額外的項目,標示為 `/resume <session-id> (previous session)`。選取該項目即可恢復執行 `/clear` 之前使用中的對話。在您退出 Claude Code 或恢復其他工作階段之前,此項目都可使用。
54 54
55#### 引導摘要55#### 引導摘要內容
56 56
57總結不會改變磁碟上的檔案,原始訊息保留在會話記錄中,因此 Claude 仍然可以參考詳細資訊。若要引導摘要的重點,請用方向鍵反白**總結**選項,並在該列顯示\*\*新增上下文(選用)\*\*的位置輸入指示,然後按 `Enter`。使用其數字鍵選擇選項會立即總結,不需要指示。57摘要不會變更磁碟上的檔案,且原始訊息會保留在工作階段逐字稿中,因此 Claude 仍可參考其中的細節。若要引導摘要的重點,請使用方向鍵反白某個 **Summarize** 選項,並在該列顯示 **add context (optional)** 的位置輸入指示,然後按 `Enter`。若使用數字鍵選取該選項,則會立即進行摘要,不附帶任何指示。
58 58
59> [!NOTE]59> [!NOTE]
60>60>
61> 總結讓您保持在同一會話中並壓縮上下文,就像有針對性的 `/compact`。若要分支並嘗試不同的方法,同時保持原始會話完整,請改用 [`/branch`](https://code.claude.com/docs/zh-TW/sessions#branch-a-session) 或 `claude --continue --fork-session`。61> 摘要會讓您留在同一個工作階段中並壓縮上下文,類似於有針對性的 `/compact`。若要分支出去嘗試不同的做法,同時完整保留原始工作階段,請改用 [`/branch`](https://code.claude.com/docs/zh-TW/sessions#branch-a-session) 或 `claude --continue --fork-session`。
62 62
63## 常見使用案例63## 常見使用案例
64 64
71 71
72## 限制72## 限制
73 73
74### Bash 命令變更未追蹤74### Bash 命令的變更不會被追蹤
75 75
76一旦 Claude 在您的對話中使用其檔案編輯工具編輯過某個檔案,`/rewind` 就會撤銷 Bash 命令之後對該檔案所做的變更。僅由 Bash 命令變更的檔案不會被追蹤,並會保持原樣。若要還原該檔案,請使用版本控制(例如 Git)。76一旦 Claude 在您的對話中使用其檔案編輯工具編輯過某個檔案,`/rewind` 就會復原 Bash 命令之後對該檔案所做的變更。僅由 Bash 命令變更的檔案不會被追蹤,並會保持原樣。若要還原該檔案,請使用版本控制,例如 Git。
77 77
78在每個提示詞下方,回溯功能表會計算對 Claude 已編輯過之檔案所做的變更,無論這些變更是由什麼造成的。若某個提示詞中有 shell 命令變更了此類檔案,該提示詞也會列出檔案變更。78在每個提示詞下方,rewind 選單會計算對 Claude 已編輯過之檔案的變更,無論這些變更由何者造成。若某個提示詞中有 shell 命令變更了此類檔案,該提示詞也會列出檔案變更。
79 79
80### 子代理編輯未復原80### Subagent 的編輯不會被還原
81 81
82[子代理](https://code.claude.com/docs/zh-TW/sub-agents.md)使用 Claude 的檔案編輯工具進行編輯,但 Claude Code 通常不會在您的會話檢查點中捕捉這些編輯。回溯是否復原這些編輯取決於子代理的執行方式:82[subagent](https://code.claude.com/docs/zh-TW/sub-agents.md) 會使用 Claude 的檔案編輯工具進行編輯,但 Claude Code 通常不會在您工作階段的檢查點中擷取這些編輯。rewind 是否會還原這些編輯,取決於 subagent 的執行方式:
83 83
84* **前景分叉技能**:[具有 `context: fork` 的技能](https://code.claude.com/docs/zh-TW/skills#run-skills-in-a-subagent)在前景執行,在您自己的回合期間編輯您的工作樹,因此回溯會照常復原其編輯。設定 `background: false` 以在前景執行分叉;有幾種情況([列在技能頁面上](https://code.claude.com/docs/zh-TW/skills.md#run-skills-in-a-subagent))無論設定如何都會在那裡執行。84* **前景分支的 skill**:在前景執行的[具有 `context: fork` 的 skill](https://code.claude.com/docs/zh-TW/skills#run-skills-in-a-subagent) 會在您自己的回合中編輯您的工作樹,因此 rewind 會照常還原其編輯。設定 `background: false` 即可在前景執行分支;在少數情況下([列於 skills 頁面](https://code.claude.com/docs/zh-TW/skills.md#run-skills-in-a-subagent)),無論此設定為何,都會在前景執行。
85* **任何其他 subagent**:回溯只會復原 Claude 在您的對話中已經編輯過的檔案。subagent 對其他檔案的編輯會保留,因此請使用版本控制(例如 Git)來還原它們。這包括在背景執行的分叉 skill(預設值)和背景 [`/code-review --fix`](https://code.claude.com/docs/zh-TW/code-review-local) 執行。85* **任何其他 subagent**:rewind 只會還原 Claude 在您的對話中已編輯過的檔案。subagent 對其他檔案的編輯會保留下來,因此請使用版本控制(例如 Git)來還原這些編輯。這包括在背景執行的分支 skill(預設行為),以及在背景執行的 [`/code-review --fix`](https://code.claude.com/docs/zh-TW/code-review-local)。
86 86
87### 外部變更未追蹤87### 外部變更不會被追蹤
88 88
89Checkpointing 只追蹤在目前會話中已編輯的檔案。您在 Claude Code 外部對檔案所做的手動變更以及來自其他並行會話的編輯通常不會被捕捉,除非它們碰巧修改與目前會話相同的檔案。89檢查點功能只會追蹤在目前工作階段中編輯過的檔案。您在 Claude Code 之外對檔案所做的手動變更,以及其他同時進行之工作階段的編輯,通常不會被擷取,除非它們剛好修改了與目前工作階段相同的檔案。
90 90
91### 訊息在回合中途傳送未進行檢查點91### 回合中途傳送的訊息不會建立檢查點
92 92
93在回溯功能表中,您[在 Claude 仍在工作時輸入的訊息](https://code.claude.com/docs/zh-TW/interactive-mode.md#queue-messages-while-claude-works)可能會被標記為**不復原程式碼**。被標記的訊息沒有自己的[檢查點](#how-checkpoints-work)。93在 rewind 選單中,您[在 Claude 仍在工作時輸入](https://code.claude.com/docs/zh-TW/interactive-mode.md#queue-messages-while-claude-works)的訊息可能會被標示為 **No code restore**。被標示的訊息沒有自己的[檢查點](#how-checkpoints-work)。
94 94
95若要撤銷 Claude 在該訊息之後所做的檔案編輯,請選擇開始該回合的提示詞,然後選擇**復原程式碼**或**復原程式碼和對話**。這會還原 Claude 在整個回合中的檔案編輯,包括您的訊息到達之前所做的編輯。95若要復原 Claude 在該訊息之後所做的檔案編輯,請選取開始該回合的提示詞,並選擇 **Restore code** 或 **Restore code and conversation**。這會還原 Claude 在整個回合中所做的檔案編輯,包括您的訊息送達之前的編輯。
96 96
97### 符號連結和硬連結路徑未復原97### 符號連結與硬連結路徑不會被還原
98 98
99檢查點功能不會回溯符號連結或硬連結檔案。當您從 `/rewind` 功能表中選擇**復原程式碼**或**復原程式碼和對話**時,Claude Code 會跳過任何是符號連結或硬連結的追蹤路徑,並顯示 `Restored the code, but skipped N files` 警告。跳過的檔案保持其目前內容。若要撤銷工作階段對其中一個檔案的變更,請要求 Claude 反轉編輯或自己編輯檔案。dotfile 管理器符號連結到您的專案中的設定檔以及 pnpm 硬連結到位置的檔案都屬於此類別。99檢查點功能不會 rewind 符號連結或硬連結的檔案。當您從 `/rewind` 選單中選擇 **Restore code** 或 **Restore code and conversation** 時,Claude Code 會略過任何屬於符號連結或硬連結的追蹤路徑,並顯示 `Restored the code, but skipped N files` 警告。被略過的檔案會保留其目前內容。若要復原工作階段對其中某個檔案的變更,請要求 Claude 反轉該編輯,或自行編輯該檔案。由 dotfile 管理工具以符號連結放入您專案中的設定檔,以及由 pnpm 以硬連結放置到位的檔案,都屬於此類別。
100 100
101若要查看復原跳過的路徑,請在復原前使用 `/debug` 開啟偵錯記錄:`~/.claude/debug/<session-id>.txt` 中的偵錯記錄會列出每個跳過的路徑。如需每個跳過原因和復原步驟,請參閱[錯誤參考中的 skipped-files 項目](https://code.claude.com/docs/zh-TW/errors.md#restored-the-code-but-skipped-files)。101若要查看還原時會略過哪些路徑,請在還原之前使用 `/debug` 開啟除錯日誌:位於 `~/.claude/debug/<session-id>.txt` 的除錯日誌會列出每個被略過的路徑。如需所有略過原因及復原步驟,請參閱[錯誤參考中的略過檔案項目](https://code.claude.com/docs/zh-TW/errors.md#restored-the-code-but-skipped-files)。
102 102
103### 不是版本控制的替代品103### 無法取代版本控制
104 104
105Checkpoints 設計用於快速的會話級恢復。對於永久版本歷史和協作,請繼續使用版本控制(例如 Git)進行提交、分支和長期歷史。105檢查點是為了快速的工作階段層級復原而設計。若需要永久的版本歷史與協作,請繼續使用版本控制(例如 Git)來進行提交、分支及長期歷史管理。
106 106
107## 另請參閱107## 另請參閱
108 108