Esc Esc trong Claude Code: tua lại code và hội thoại bằng checkpoint
Tóm tắt
Claude Code lưu checkpoint trước mỗi prompt, tua lại bằng Esc Esc hoặc /rewind với 5 lựa chọn. Rẻ hơn nhiều lượt sửa sai, nhưng lệnh Bash, subagent và thay đổi bên ngoài có thể nằm ngoài checkpoint.
Bạn nhờ Claude Code refactor một module, nó sửa 12 file, test đỏ lòm, và cách nó đi hoàn toàn sai hướng. Phản xạ thường gặp là gõ thêm "không, quay lại cách cũ đi", tức là tốn thêm vài lượt và để lại một đống lịch sử sai trong context. Cách nhanh hơn: nhấn Esc hai lần. Claude Code tự lưu checkpoint trước mỗi prompt, nên bạn có thể tua lại cả code lẫn hội thoại về đúng thời điểm trước khi mọi thứ hỏng. Bài này giải thích checkpoint hoạt động ra sao, các lựa chọn trong menu rewind và những giới hạn cần biết để không "tưởng đã khôi phục mà không phải".
Checkpoint được tạo khi nào?
- Mỗi prompt bạn gửi (bắt đầu một lượt) tạo một checkpoint, ghi lại trạng thái file trước khi Claude sửa.
- Giữ snapshot cho 100 checkpoint gần nhất trong phiên; lưu cùng hội thoại nên vẫn rewind được sau khi resume.
- Snapshot bị dọn theo chu kỳ, mặc định khoảng 30 ngày sau lần lưu cuối (chỉnh bằng
cleanupPeriodDays).
Menu rewind: 5 lựa chọn
Gõ /rewind hoặc nhấn Esc hai lần khi ô nhập trống, chọn prompt muốn quay về, rồi chọn hành động:
| Lựa chọn | Làm gì | Dùng khi |
|---|---|---|
| Restore code and conversation | Tua cả file lẫn hội thoại | Hướng làm sai hoàn toàn, muốn làm lại từ đầu với prompt tốt hơn |
| Restore conversation | Tua hội thoại, giữ code hiện tại | Code ổn nhưng lịch sử trò chuyện lan man, muốn context sạch |
| Restore code | Hoàn tác file, giữ hội thoại | Muốn Claude nhớ "cách vừa rồi thất bại vì sao" rồi thử cách khác |
| Summarize from here | Nén phần hội thoại từ điểm này trở đi thành tóm tắt | Một đoạn debug dài đã xong, muốn giải phóng context nhưng giữ chỉ dẫn ban đầu |
| Summarize up to here | Nén phần trước điểm này, giữ nguyên phần sau | Phần khám phá đầu phiên không còn cần chi tiết |
Sau khi tua hội thoại, prompt gốc được điền lại vào ô nhập để bạn sửa rồi gửi lại. Với hai lựa chọn Summarize, có thể gõ thêm hướng dẫn tóm tắt (ví dụ "giữ lại các quyết định về schema") trước khi nhấn Enter. Summarize giống một /compact có chọn lọc; muốn rẽ nhánh thử hướng khác mà vẫn giữ phiên gốc thì dùng /branch.
Vì sao rewind tiết kiệm token?
Sửa sai bằng cách nói tiếp nghĩa là mọi lượt sau phải "mang theo" cả phần thử sai: diff hỏng, log lỗi, lời giải thích. Rewind cắt bỏ phần đó khỏi context. Kết hợp với prompt tốt hơn, lượt làm lại thường ngắn hơn nhiều so với 3–4 lượt chỉnh sửa qua lại.
Giới hạn quan trọng
- Lệnh Bash không được theo dõi đầy đủ: file chỉ bị thay đổi bởi lệnh shell (ví dụ
rm,mv, script sinh code) mà Claude chưa từng sửa bằng công cụ edit thì rewind không khôi phục. - Subagent: phần lớn chỉnh sửa của subagent (trừ skill fork chạy foreground) không nằm trong checkpoint của phiên chính.
- Thay đổi bên ngoài: file bạn tự sửa ngoài Claude Code hoặc do phiên khác sửa thường không được ghi lại.
- Symlink/hard link: bị bỏ qua khi khôi phục, kèm cảnh báo "skipped N files".
- Tin nhắn gửi giữa chừng khi Claude đang làm có thể không có checkpoint riêng.
Tài liệu nói rõ checkpoint là công cụ khôi phục nhanh trong phiên, không thay git.
Áp dụng thế nào?
- Dev: Tập phản xạ "sai hướng thì Esc Esc, sửa prompt, gửi lại" thay vì cãi tiếp. Commit trước các thay đổi lớn hoặc khi Claude sắp chạy lệnh shell có tác dụng phụ.
- Tech Lead: Hướng dẫn team kết hợp: checkpoint cho thử nghiệm ngắn, worktree/branch cho thử nghiệm dài, git cho lịch sử thật.
- PM: Khi dùng Claude soạn tài liệu, dùng "Restore conversation" để thử nhiều phong cách viết khác nhau trên cùng bản nháp.
Nguồn & tham khảo
- Checkpointing — Claude Code Docs