簡體   English   中英

回滾到Mercurial中的舊版本(如git reset)

[英]Rolling back to an old revision in Mercurial (like git reset)

使用git,我可以使用像這樣的命令丟棄錯誤或意外的提交

git reset --soft HEAD^

它將當前分支(例如master )重置為當前修訂版的父提交HEAD^而不觸及工作樹 - 如果你想要刪除工作樹,你可以用--hard替換--soft

另外,如果我想擺脫多個提交,我可以使用像這樣的命令

git reset --hard 53b94d0

這讓我完全回到了承諾53b94d0,好像我之后從未做過任何事情。

什么是Mercurial(hg)等價物?

雖然Mercurial沒有提供一個簡單的替代方案,並且不同於可變歷史的概念,但有幾種方法可以實現一些接近的東西。 在這篇文章中,我將概述其中的一些內容。

hg rollback

如果您特別想撤消上次提交,可以使用:

hg rollback

這將取消提交(不接觸工作樹 - 您應該能夠使用hg revert --allhg update -C來跟隨它,如果你想重置整個工作目錄)。

hg clone -r

假設您要將名為giraffe的存儲庫重置為修訂版77182fb7451f。 如果你cd到父目錄並運行:

hg clone -r 77182fb7451f giraffe new-giraffe
cp giraffe/.hg/hgrc new-giraffe/.hg/

那么你最終會得到新長頸鹿,一個修訂版本為77182fb7451f的存儲庫。 cp是必要的,以確保新的長頸鹿paths (如git的“遙控器”)正確指向原始倉庫而不是默認情況下的giraffe文件夾。)

這比從互聯網重新克隆更快,因為它只在磁盤上本地復制文件(在許多系統上,硬鏈接它們以節省更多時間和空間),但如果您的存儲庫很大,仍然非常耗時。

hg strip

如果你想通過修改提交歷史來做更復雜的事情(順便說一句,這在hg世界中有些不受歡迎),首先通過在.hgrc添加以下行來啟用Mercurial Queues擴展 (不需要指定等號后的路徑):

[extensions]                                                                    
mq =

這為您(以及其他有用的東西) hg strip命令提供了從存儲庫中完全刪除變更集及其所有后代的功能。 因此,您可以使用如下命令:

hg strip 1cc72d33ea76

如果1cc72d33ea76是您要刪除的存儲庫中的第一個“壞”變更集。

不幸的是,使用這種方法通常很難刪除完全正確的變更集,並且很容易最終得到多個頭(你可以使用hg heads查看),需要繁瑣的重復應用hg strip才能到達你想要的位置沒有額外的頭腦。

hg strip使用revsets

使用hg revsets你可以刪除所有的祖先. (當前版本),它們不是您想要恢復的修訂版的祖先,使用如下命令:

hg strip "ancestors(.) and not ancestors(77182fb7451f)"

確保首先運行:

hg log -r "ancestors(.) and not ancestors(77182fb7451f)"

這將顯示hg strip將刪除的所有變更集,因此您可以確保不會無法修復您的提交歷史記錄(因為您有備份......對嗎?)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM