Mono
候補名單

如何復原 AI 程式開發代理所做的變更

安全地復原 AI 程式開發代理的編輯:還原單一檔案、捨棄它留下的未提交變更,或反轉它的提交,同時不弄丟你自己的工作。

要復原 AI 程式開發代理的變更,先檢查改了什麼,再使用對應的 Git 指令:已編輯的檔案用 git restore,新檔案用 git clean,提交則用 git revert。動手前先用 git stash 存一份安全備份。Claude Code 本身的 /rewind 也能還原程式碼,但它不會追蹤每一項變更。

本文從你已決定捨棄這些工作開始談起;要不要捨棄,可以參考審查 AI 程式碼變更。Mono 會顯示改了什麼,但不會幫你復原,所以在 Mono 中使用的指令也一樣。

1. 停止代理並查看改了什麼

首先,停止代理。在 Mono 中,代理工作時,傳送按鈕會變成取消按鈕。在專案資料夾的終端機中執行:

text
git status
git log --oneline -5

第一個指令列出已修改、已刪除、已暫存和新的檔案。第二個指令顯示最近的提交,包括代理所做的提交。記下哪些變更是你自己的:復原指令不知道每一行是誰寫的。

你看到的情況 復原方法
已修改或已刪除、尚未暫存的檔案 git restore <path>
已暫存的變更 git restore --staged <path>,再復原該檔案
新的未追蹤檔案 git clean -n <path>,再執行 git clean -f <path>
你不想要的提交 git revert <commit>

在 Mono 中,「顯示變更」會列出自上次提交以來修改過的檔案和新檔案,所以不會顯示代理已經做出的提交。

2. 先存一份安全備份

restore 和 clean 會永久捨棄未提交的工作,所以先把所有內容存起來:

text
git stash push --include-untracked -m "before undo"
git stash apply --index

第一個指令會儲存你修改過的檔案和新檔案,並清理工作目錄;第二個指令會把它們放回來,同時保留原本的暫存狀態。表面上看起來沒有任何變化,但 git stash list 現在多了一份名為「before undo」的備份。

如果復原過頭,git restore --source "stash@{0}" <path> 可以從最新的 stash 找回某個編輯過的檔案。

3. 復原一個檔案或其中一部分

選擇範圍最小的指令:

  • git restore <path> 會捨棄該檔案中尚未暫存的編輯。
  • git restore --staged <path> 會取消暫存某項變更,但保留檔案中的編輯。
  • git restore -p <path> 會逐一詢問每個修改區塊(hunk),適合你和代理編輯過同一個檔案的情況。
  • git clean -n <path> 會列出 git clean -f <path> 將會刪除的未追蹤檔案。一定要指定路徑。

git restore 文件說明了每個選項。

4. 復原代理留下的所有未提交變更

如果沒有任何變更是你的,可以在專案根目錄執行 git restore --staged --worktree . 全部捨棄,再對新檔案執行 git clean -n . 和 git clean -f .。否則就按路徑逐一處理。

以下是虛構範例:你請代理在「tidy-recipes」專案中把 CSS 類別 .btn-primary 改名為 .button-main。稍早,它已經提交過一次沒人要求的鎖定檔(lockfile)更新。這一次,它在 3 個檔案中改了類別名稱,重新格式化了 12 個無關的檔案,還建立了 styles/tokens.css。同時,你手動編輯了 README.md,並想保留這些修改。

建立安全備份後,還原代理修改的檔案(這裡是 src/ 和 styles/main.css),並刪除它建立的新檔案:

text
git restore src/ styles/main.css
git clean -n styles/tokens.css
git clean -f styles/tokens.css

這裡不要用 git restore .:它也會捨棄你對 README 的編輯。如果你在 src/ 裡也有編輯,就逐一指定代理修改過的檔案。

現在 git status 只列出 README.md,git diff 也只顯示你寫的那幾行。鎖定檔的提交仍然存在。

5. 復原代理已經做出的提交

git revert 會記錄一個新的提交,把先前的某個提交反轉回來。git revert 文件指出,這需要乾淨的工作目錄,所以先把你對 README 的編輯暫時收起來:

text
git stash push -m "readme" README.md
git revert <lockfile commit>
git stash pop

使用 git log 中的雜湊值,並加上 --no-edit 略過訊息編輯器。git stash pop 會找回「readme」,並把「before undo」留在清單中。現在 git status 只列出 README.md,而 git log --oneline 的最上方顯示 Revert "Update lockfile"。

對於已推送的提交,用 revert 比用 git reset 好,因為後者會改寫別人可能已經取得的歷史。如果在 reset 或 rebase 之後某個提交似乎不見了,git reflog 會列出你最近停留過的提交及其雜湊值。

6. 使用代理的檢查點,並以 Git 作為後備

Claude Code 會在你每次送出提示詞前儲存一個檢查點:執行 /rewind,或在輸入框沒有內容時按兩次 Esc,就能還原程式碼、對話或兩者。它的檢查點文件列出了限制:shell 指令造成的變更不會被追蹤,外部編輯通常不會被記錄,而檢查點也不能取代版本控制。能不能使用,還取決於你用哪個 App 執行代理。

所以要讓 Git 成為你的後備:

  • 每項任務開始前先提交或建立分支,讓「上一次提交」就等於「代理動手之前」。
  • 告訴代理未經詢問不要提交,例如寫在你的 AGENTS.md 檔案中。
  • 保持核准功能開啟。Mono 的 YOLO 模式會接受代理的所有要求,預設為關閉。請參考允許前要確認什麼。

在 Mono 中,專案卡片可以在你電腦上的專案資料夾中開啟終端機,用手機也可以(見遠端程式設計指南)。Mono 還沒有正式推出,但你可以加入候補名單。

作者

Reunified 打造能把分散的東西重新聚在一起的 App。

繼續閱讀

所有文章

閱讀約需 6 分鐘

如何為程式開發代理撰寫 AGENTS.md 檔案

撰寫一份簡短的 AGENTS.md,列出安裝與測試指令、規則和界線,讓 Claude Code 和 Gemini CLI 載入它,再用小任務測試。

閱讀約需 6 分鐘

如何防範 AI 助理的提示詞注入攻擊

限制 AI 助理處理電子郵件、網頁和檔案時能做的事,保持核准機制開啟,安全地測試你的設定,並知道助理被操控時該怎麼辦。

即將推出

加入候補名單

留下你的電子郵件地址,Mono 可以下載時我們會通知你。

你會在哪裡使用 Mono?