2012-12-27 25 views
5

我試圖改變我拉到我的本地機器的一些變化。我發現了錯誤:你如何使用Mercurial重建一個不可變的變更集?

abort: can't rebase immutable changeset 110e73ed65a4 
(see hg help phases for details) 

我也得到了同樣的錯誤,即使後我改變相位對我rebaseing(和相變似乎是成功的)的變更。使用:

hg phase -f -d REV 

我想知道如果有一個在我失蹤,仍然是不可改變的歷史變更,如果是這樣,如果有,我可以改變所有的變更集的變更的一種方式歷史可以用一個命令來改變。

或者,有沒有辦法強制rebase,即使有不可改變的變更集?

+0

有關如何指定多個變更集的信息,請參見http://www.selenic.com/mercurial/hg.1.html#revsets。 'hg phase -f -d REVA :: REVB'。請注意,儘管您可以使用「--force」階段,但Mercurial可以防止您有一個公開的變更集,其祖先是祕密或草稿。因此,在輸入'hg phase -f -d REV'的任何情況下,在輸入命令前,'REV'和*所有它的祖先*必須已經公開,並且該命令只改變'REV'。另一方面,一個'hg階段-f -d BASE_REV'也會影響所有的後代,'hg rebase'應該可以工作。 – Ein

回答

5

重新公開的變更被認爲是very bad idea。你不應該改變任何被推送的歷史記錄 - phases的要點是追蹤尚未推送的變化(因此它們能夠被修改),以及推動了哪些變化(所以它們是不可變的)。從rebase documentation

You should not rebase changesets that have already been shared with others. Doing so will force everybody else to perform the same rebase or they will end up with duplicated changesets after pulling in your rebased changesets.

最好是無論是在您的更改或graft它們合併移植(又稱挑肥揀瘦)接受一個或多個變更,並將它們複製到你的當前分支。

+2

我的經驗是,變更集可以被認爲是不可變的,沒有被推動。如果您有兩臺本地計算機在彼此之間拖動您的更改,則可以將它們視爲「推送」,即使它們不是 – Arvid

+0

Rebase支持'--keep'選項。像這樣重新提交的提交包含來自移植的不同元數據 - 它們以不同方式顯示。 – user2864740

相關問題