2011-02-22 157 views
53

我想完全刪除一個Mercurial提交,就好像它從未在存儲庫中輸入並回到我之前的提交。如何刪除Mercurial中的提交?

這可能嗎?

+0

http://stackoverflow.com/questions/2338986/is-there-any-way-to-delete-local-commits-in-mercurial的重複 - 特別是見答案http://stackoverflow.com/a/6549478/8479 – Rory 2012-11-05 23:02:52

回答

32

如果這是您最後一次提交,並且您沒有將它推到任何位置,則可以使用rollback執行此操作。否則,不。不是真的。有時間改變你的密碼。

編輯:有人指出,你可以從一箇舊版本的克隆和你想保留的修改合併。這也是事實,除非你把它推到你無法控制的回購。一旦你推動,你的數據很可能很難找回來。

+1

哈哈我不小心做到了這一點(有我的ssh私鑰) – 2011-02-23 00:27:36

+0

如果你沒有推動修訂版本,將相位更改爲祕密怎麼辦? – 1nfiniti 2013-03-22 06:29:39

+0

@mikeyUX:這個答案是在2.1出來之前編寫的,但是將階段更改爲機密並不實際刪除更改集;它只是阻止你在'hg outgoing'中看到它或者與另一個倉庫共享它。改變階段爲祕密,然後克隆將做大致相同的事情,我的編輯建議。儘管如此,我會在使用之前使用histedit或mq。 – nmichaels 2013-03-27 20:19:43

5

您可以使用「hg backout」基本進行反向合併。所有選項都在免費提供的書中討論「的Mercurial:權威指南」:

http://hgbook.red-bean.com/read/finding-and-fixing-mistakes.html

+0

我意識到我的建議並沒有刪除提交,但鏈接確實討論了所有選項,包括nmichaels建議的「hg rollback」選項。 – 2011-02-22 22:48:31

+0

一般我喜歡這個解決方案。承認你的錯誤並保留你的不良承諾的歷史以及你支持他們的事實是可以的。 – 2011-02-23 02:55:37

5

如果它是一個以上的提交和/或你已經推別的地方,你可以複製你的資料庫,並指定應該克隆的最後一個變更集。

見我的答案在這裏如何做到這一點:
Mercurial: Fix a borked history

如果你只本地提交,並沒有推,你可以創建一個本地克隆(在我的鏈接描述),即可大功告成。

如果您已經推送到某個遠程存儲庫,則必須將其替換爲您的克隆。
當然這取決於你是否能夠(或允許)這樣做。

29

您可以嘗試刪除關於您的提交的mq信息。

  • 爲此,你需要去文件 - >設置 - >擴展。
  • 檢查mq並重新啓動gui。
  • 之後,只要右擊不需要提交和 ModifyHistory->地帶
+0

你在說TortoiseHg嗎? – Pluto 2015-08-25 20:14:34

3

如果使用烏龜就可以使用修改歷史>帶...

10

要編輯的歷史我會用Histedit Extension擴展。

hg histedit 45:c3a3a271d11c 

但是記住這纔有意義,在您尚未推提交給公共庫的情況下,你自己的公共倉庫和/或可以解釋所有克隆那裏。如果您收到以下錯誤:

abort: can't rebase immutable changeset 43ab8134e7af 

這意味着Mecurial認爲,這是一個已經被推向公衆變更(見phases) - 你可以強制它是一個draft再次做:

hg phase -f -d 45:c3a3a271d11c 
+1

我相信這是更正確的最新答案。汞的演變。 – 2014-07-26 19:59:22

6

我經常遇到這種情況。我做了一個提交併且然後拉到推。但是接下來有些東西讓我新做的提交不必要。一個普通的hg rollback是不夠的,因爲它只撤銷拉...

這是應該做的事情:

hg strip <rev> 

事情是無痛的,當你不隨地把你的變更。

1

是的。除非我誤認爲,從v2.3(rel。2012/08/01)起,您可以使用HisteditExtension drop命令刪除提交,並提供stripbackout以刪除更改。

上配有簡單的谷歌搜索:https://www.google.com/webhp#q=histedit+drop