儘管Mercurial沒有提供一個簡單的替代方案,並且避開了可變歷史的想法,但有幾種方法可以實現一些近似。在這篇文章中,我將概述其中的一些。
汞柱回滾
如果你特別想撤消前提交,你可以使用:
hg rollback
將取消提交(不碰工作樹 - 你應該能夠如果您想重置整個工作目錄,也可以使用hg revert --all
或hg update -C
)。
汞柱克隆-r
假設你想重置庫稱爲giraffe
修訂77182fb7451f。如果您cd
到父目錄,然後運行:
hg clone -r 77182fb7451f giraffe new-giraffe
cp giraffe/.hg/hgrc new-giraffe/.hg/
那麼你會用新長頸鹿,在修訂77182fb7451f存儲庫結束。 (該cp
是必要的,以確保新長頸鹿paths
(如Git的「遙控器」)正確,因爲它會默認至原點回購而不是向giraffe
文件夾。)
這比從互聯網上再克隆快因爲它只能在磁盤上本地複製文件(並且在許多系統上,硬連接它們以節省更多時間和空間),但是如果您的存儲庫很大,仍然會非常耗時。
汞柱條
如果你想修改提交歷史(這有點在汞世界皺起了眉頭,順便)做更復雜的東西,先加入以下行啓用Mercurial Queues extension您.hgrc
(有沒有必要等號後面指定路徑):
[extensions]
mq =
這給你(除其他有用的東西)的hg strip
命令從庫中完全刪除變更和其所有後代。因此,你可以使用如下命令:
hg strip 1cc72d33ea76
如果1cc72d33ea76是在你的倉庫的第一個「壞」變更要刪除。
不幸的是,通常很難使用這種方法來去除完全正確的變更,這一切都太容易多頭(你可以使用hg heads
查看)結束了,需要的hg strip
繁瑣重複的應用程序,然後才能去的地方你希望沒有額外的頭。
汞柱條使用revsets
使用hg revsets可以刪除它們要恢復到修訂的不祖先.
(當前版本)的所有祖先,使用如下命令:
hg strip "ancestors(.) and not ancestors(77182fb7451f)"
確保第一次運行:
hg log -r "ancestors(.) and not ancestors(77182fb7451f)"
它會告訴你人l hg strip
將刪除的更改集,因此您可以確保不會對您的提交歷史記錄造成無法挽回的損害(因爲您有備份......對嗎?)。
因此,在hg中,等效的重置/回滾不僅僅是改變分支標記提交的內容,還涉及到數據庫的一些實際更改。 – jthill