恢復中心
破壞性操作執行前,應用會先把相關狀態寫到本機快照。恢復中心(⌘K 搜尋“恢復中心”,或從狀態列的撤銷入口進入)負責列出、預覽、恢復與清理這些快照。
哪些操作會留下快照
| 操作 | 快照內容 |
|---|---|
| 丟棄檔案、片段、行或批次丟棄 | 被丟棄改動的補丁;批次丟棄儲存整棵工作區 |
| 刪除 Stash | 該 Stash 指向的提交 |
| 硬重置 | 重置前的髒工作區 |
| 帶租約強推 | 推送前的遠端尖端 |
| 中止合併、變基、揀選等操作 | 中止時的工作區目錄 |
快照寫失敗會阻止對應操作執行,而不是先破壞再補救。
保留上限
- 時間:24 小時
- 數量:200 份
- 體積:512 MiB
上限在開啟倉庫時檢查並清理超出部分。快照目錄位於應用資料目錄;不可寫時回退到系統臨時目錄。清理過期條目會永久刪除檔案,刪除前需要確認。
恢復
恢復會先檢查當前內容,再決定是否寫入:
- 補丁類快照先做
git apply --check; - 檔案類快照檢查目標路徑的現狀;
- 如果快照之後檔案又改過,恢復會停下來,不覆蓋新內容,並保留快照供你匯出或手工比對。
批次應用時,所有補丁都會在第一次寫入前檢查完;只要有一處衝突,就什麼都不寫,並列出衝突路徑。
硬重置的快照恢復只寫檔案,不會移動 HEAD。
強推之後找回
帶租約強推前會記錄遠端尖端,並用一個備份引用固定它。恢復時的行為是:
- 先讀一次遠端;
- 只有遠端仍停在強推後留下的那個提交,才把舊提交重新推回去;
- 如果之後有人推送過,恢復停止且不做任何修改。
匯出與刪除
- 匯出 — 把快照儲存到指定位置,作為普通檔案保留;
- 刪除 — 永久刪除單條快照;
- 清理過期 — 刪除當前倉庫中超過 24 小時的全部快照;
- 搜尋 — 按路徑、操作或型別過濾。
恢復失敗時快照不會消失,仍可匯出。
與「撤銷提交」的區別
提交後 60 秒內的「撤銷」是 git reset --soft,把 HEAD 退回上一個提交,改動留在暫存區,不產生快照。它只處理當前 HEAD,並且在沒有進行中的操作時可用。其餘破壞性操作走恢復快照。
批次丟棄中斷
批次丟棄會先為整批寫一份工作區快照,再開始逐路徑寫入,同時維護一份日誌。如果程序在中間退出,重啟後狀態列會提示上次批次未完成,並在恢復中心裡列出這份快照。
最後更新於