跳轉到內容

理解 Darcs/撤銷錯誤

來自華夏公益教科書,開放世界開放書籍

有許多方法可以刪除內容:remove、rollback、revert、obliterate、unpull、unrecord... 幾乎讓人覺得太多了。其中只有三個非常重要。按嚴重程度排列,它們分別是revert, unrecord, obliterate. 你也可以將它們視為對稱表的一部分

近期 任務 反任務
最新 whatsnew
(例如:新增、刪除、移動、編輯檔案)
revert
近期 record unrecord
較早 pull unpull (又稱 obliterate)

別太擔心這張表。它遲早會變得有意義的。

無論如何,以下是對所有不同刪除內容方法的簡要比較。每個方法都有其用武之地,即使是那些奇怪的方法,比如rollback.

三大命令

[編輯 | 編輯原始碼]

revert只刪除新內容

[編輯 | 編輯原始碼]
revert不小心編輯了一些內容?試試unrevert

這些命令中最簡單的是 **revert**。revert 的作用就是刪除你還沒有記錄的內容。你可以將 revert 視為 whatsnew 的“反面”。revert 刪除的是新內容。

The darcs revert command
darcs revert 命令

unrecord使內容再次變為新內容

[編輯 | 編輯原始碼]

**Unrecord** 與 revert 的作用完全不同。revert 刪除的是新內容,而 unrecord 刪除的是補丁,但重要的是,它會 *使補丁中的內容再次變為新內容*,以便你可以隨意選擇重新記錄或撤銷它。

只有當你記錄了一些內容,然後意識到自己犯了錯誤,想要以不同的方式記錄時才應該使用 unrecord(另請注意 amend-record)。注意:只有當你確定你的倉庫是唯一包含該補丁的倉庫時才應該使用 unrecord!

The darcs unrecord command
darcs unrecord 命令

請注意,上面的圖片更準確地描述了 unrecord 的作用——它從原始樹中刪除了一個補丁及其相應的修改。內容再次變為新內容只是這個事實的自然結果。

obliterateunrecord + revert

[編輯 | 編輯原始碼]

**Obliterate** 故意被命名為一個令人害怕的詞。Obliterate 可以看作是 unrecord 一個補丁(從而使它的內容再次變為新內容),然後 revert 它。換句話說,obliterate 會完全刪除一個補丁!通常情況下:你會使用 obliterate 回到很早之前的時間點。比如,“嗯,我過去三個月一直在做的那些東西都很愚蠢”。Obliterate 就是你的答案。

The darcs obliterate command
darcs obliterate 命令

其他刪除內容的方法

[編輯 | 編輯原始碼]

unpullobliterate

[編輯 | 編輯原始碼]

**Unpull** 和 **obliterate** 是完全相同的命令,只是為了反映它在撤銷 pull 操作中的用途而被命名為 unpull。

**Rollback** 不是你經常會用到的命令。情況是這樣的。你想要刪除一個補丁,但人們一直在告訴你,你不應該 obliterate 或 unrecord 已經在其他人倉庫中的補丁。那麼你該怎麼辦呢?一個解決方案是開啟你的文字編輯器,做出與補丁中修改完全相反的修改(然後記錄等等)。另一個解決方案是生成一個 rollback 補丁,它能做同樣的事情。它會建立一個補丁,與另一個補丁的作用完全相反。

一些使用者發現直接使用文字編輯器更容易。

remove不屬於這裡

[編輯 | 編輯原始碼]

儘管它的名稱是“刪除內容”風格,remove實際上並不是一個撤銷類命令。它的作用與add相反:它告訴 darcs 不再關注某個檔案。但正如我們在上一章中提到的,大多數時候你甚至不需要darcs remove. 只需要告訴你的計算機刪除工作目錄中的檔案就足夠了,darcs 會注意到它不見了。

問題和異議

[編輯 | 編輯原始碼]
  • 但是...但是...我只想回到兩週前我的倉庫的狀態!
    • obliterate這可能是你想要做的。見上文。
下一頁: 處理衝突 | 上一頁: 回顧你的工作
主頁: 理解 Darcs
華夏公益教科書