! 本篇文章將會介紹 /undo 與 /redo,有安全網你才敢讓 AI 盡情發揮,錯了就讀檔重來 :D
TL;DR: https://dev.benben.me/slides/s/ironman-07-undo-redo
讀完這篇你會學到:
/undo 的完整機制(退的不只是檔案)/redo 與連續 undo你請 AI 重構一支 API:
幫我重構 @src/api/index.ts 裡的程式碼
它豪邁地改了三個檔案,跑完你一看:慘了,邏輯整個歪掉。怎麼辦?
傳統做法:git checkout . 挽救,然後祈禱。opencode 的做法:/undo(或 ctrl+x u)。
/undo 做三件事:
然後你的原始訊息會重新出現在輸入框——擺明了要你改寫 prompt 再戰一次。
這就是「嘗試 → 不滿意 → 重來」的循環:改壞了不用手動救檔案,退一步、把需求講得更清楚、再衝一次。嘗試成本大幅降低,你就敢讓 AI 大膽動手。
/undo 可以連按多次,一路退回更早的狀態——就像遊戲裡的 quick save / quick load,死掉就讀上一個存檔。
/undo 之後發現「欸剛剛其實改得不錯」?/redo(ctrl+x r)幫你救回來,檔案變更也會一併恢復。注意它只在用過 /undo 之後才有效——沒退過就沒得重做,很合理。
一個很多人踩過的坑:/undo 底層靠 Git 管理檔案變更,你的專案必須是 Git repository,如果不是的,記得先在該資料夾 git init。
不是 git repo 的資料夾(例如隨手開的 sandbox),/undo 的檔案還原就不會正常運作。opencode 的 snapshot 機制預設開啟,用內部的 git 系統追蹤每次變更——所以大改動之前,你其實已經有兩層保險:opencode 的 snapshot,加上你自己的 git commit 習慣。
小小測驗:
/undo跟git reset有什麼不同?
想一想再往下看——/undo是 session 內的時間旅行:退訊息、退回應、退檔案,一次打包。git reset是 repo 層的版本控制,不管你的對話。兩者互不取代,搭配服用。
| 情境 | 用什麼 |
|---|---|
| AI 這輪改壞了,想重寫 prompt 再來 | /undo |
| 想回到更早幾輪的狀態 | 連按 /undo |
| 已經 commit 了想退版 | git(git revert / git reset) |
| 大重構前的保險 | 先自己 git commit 一版 |
筆者習慣:讓 AI 動大刀之前先 commit 一次。snapshot 保險歸保險,自己的 commit 最踏實。
/undo 管的是 session 內的變更,已 commit 的版本交給 git 本身管理。snapshot 關掉——但代價是失去 UI 內的 rollback,三思。/undo 三合一:退訊息、退回應、退檔案,可連按;/redo 救回反悔Day 08:個人化設定——主題、keybinds 與兩個設定檔的正確分工。
參考資料:
有任何疑問但沒有 iT 邦幫忙帳號,或是想匿名提問?
歡迎到 https://dev.benben.me/q/P3C5U6 提問或加油打氣,沒意外的話會在完賽之後一起回答 :D