2012-01-18 96 views
1

是否有將單個提交(例如,本地存儲庫中的提示變更集)轉換爲工作目錄中的未提交更改的方法?
我知道hg strip刪除指定的變更集並將其備份,但它是否會將這些變更集轉換爲工作目錄中的未被更改的變更?將已提交的變更集轉換爲Mercurial中的未提交更改

編輯:的hg rollback

關於使用。

如果在我想要做hg rollback之前我有未提交的更改怎麼辦?我必須首先提交這些內容嗎?最後幾次提交呢?序列號hg rollback是否將這些提交的更改疊加到現有未提交的更改?

回答

7

如果你想重做最後一次提交(也許是一個更好的提交信息,也許修正了一個錯誤),那麼你現在應該使用

$ hg commit --amend

更新最後承諾。如下所述,這比使用hg rollback安全得多。

如果提交是最後一次提交,你有沒有更新任何地方,那麼你可以使用hg rollback。請閱讀hg help rollback - 這是一個潛在的破壞性命令。

它做什麼:hg rollback將回滾您的存儲庫中的最後transaction。每當你hg commithg pullhg unbundle等,你創建一個新的交易。當一切安全存儲後,Mercurial關閉交易。如果交易中出現問題,Mercurial可以恢復(請參閱hg recover)。您也可以使用hg rollback手動回滾上次交易。請參閱hg rollback --dry-run瞭解該命令將執行的操作。

回滾命令不會觸及您的工作副本。這意味着顯示爲之前修改的文件將再次出現修改。所以很容易做

$ hg commit -m "Fixed buug-123" 

Ups,錯誤在提交消息!讓我們來解決這個問題:

$ hg rollback 
$ hg commit -m "Fixed bug-123" 

(使用hg commit --amend與替代水銀2.2及更高版本。)

最後提交信息也保存在.hg/last-message.txt這樣你就可以從那裏恢復它,如果你沒有它你的shell歷史。

如果在我想要執行hg回滾之前我有無法做出的更改會怎麼樣?我必須首先提交這些內容嗎?

回滾不會觸及工作副本。這意味着工作副本中的任何其他更改將與變更集中的更改一起顯示。就好像你根本沒有輸入hg commit。

最後幾次提交怎麼樣?連續hg回滾堆棧是否從提交更改爲現有未被更改的更改?

不,你只有one level of rollback因爲我們只跟蹤最後的交易。

+0

如果在我想要執行'hg rollback'之前我有無限制的更改怎麼辦?我必須首先提交這些內容嗎?最後幾次提交呢?連續的'hg rollback'堆棧是否從那些提交改變爲現有的未被改動的改變? – 2012-01-18 10:16:12

+0

回滾不會觸及工作副本。這意味着工作副本中的任何其他更改將與變更集中的更改一起顯示。就好像你沒有輸入'hg commit'。更改多個提交是另一個主題,請參閱[回滾多個提交](http://stackoverflow.com/q/4925094/110204),也許[更新提交消息](http://stackoverflow.com/a/8503002/110204) 。 – 2012-01-18 10:36:32

+0

值得一提的是,在想要解決提交消息的特定情況下,'hg commit --amend'可能更有用。這是在Mercurial 2.2中添加的,這個答案寫完後四個半月。 – 2013-04-19 09:44:11

0

雖然你應該儘可能使用hg commit --ammend我現在更喜歡新的和更強大的mecurial歷史編輯功能:hg histedit特別是如果你熟悉git。

你可以通過簡單地做一個hg out(即你想選擇未被推送的版本)來看到你想要返回的版本。