2011-10-14 34 views
3

假設我在本地回購中有幾個提交,並且在工作目錄中有一些未被改動的更改。 hg pull,hg update之後,我從中央回購中得到了一些新的變更集,這些變更集在本地回購中創建了一個新的頭。水銀線性歷史記錄使用hg rebase與未改變的變化

現在假設,我並不想合併這兩個頭和推動,在這種情況下,我會,我在工作目錄未提交更改的消息,試圖合併時。

另外,假設我不想使用hg shelve爲了擱置未被改變的合併而沒有問題,但想通過使用hg rebase創建線性歷史記錄,所以我將提交放在提交的提交之上。當我做rebase,有效地我做一個合併,如here,在hg rebase章節。

現在我的問題是,我會得到相同的錯誤消息:「不能合併,有未得到改變」,因爲hg rebase確實隱式合併,或不?重訂時,沒有兩國元首明確的合併和隱性的合併:

如果是的話,那麼我會在兩種情況下使用hg shelve

由於提前,
乾杯

+1

您在提交之前是否必須修復歷史記錄?爲什麼不等到以後再提交,然後修改歷史記錄呢?最好的方法是使用正常的操作系統(例如Windows中的複製/粘貼)完整地複製整個工作文件夾,然後在其中一個副本中進行試驗。 –

回答

4

假設我有在本地回購多次提交,並在工作目錄的一些未提交更改。在hg pull,hg update之後,我從中央回購中得到了幾個新的變更集,這些變更集在本地回購中創建了一個新的頭。

如果你在工作目錄未提交的更改,並hg pull爲您提供了從上游的新掌門人,hg update會告訴你:

abort: crosses branches (merge branches or use --clean to discard changes) 

如果您嘗試合併,然後你會得到一個消息關於無法合併未提交的更改。

這一切是很好的理由:如果變化沒有責任感,他們是受被永遠失去了當合並機械踢英寸在嘗試合併或重新綁定到上游代碼之前,您應該提交或擱置未提交的更改。

你也可以考慮使用MQ來幫助你; MQ和rebase被設計爲可以很好地協同工作,所以如果你的本地沒有完成的更改由MQ管理,你所要做的就是hg qrefresh; hg pull --rebase

5

簡單的答案是肯定的。 hg rebase將不允許您在未提交修改時執行重新綁定。有幾個解決方案,其中沒有一個是完美的:

  • 提交您的奧斯坦丁工作,做底墊,然後hg export tip > foo.patchhg strip tiphg import --no-commit foo.patch

  • 使用hg shelve。由於我沒有嘗試過,所以我無法對此進行詳細評論。

  • hg branch <branch-name>新建一個名爲分支然後提交上指名的分支您出色的工作。然後,您可以使用hg rebase --keepbranches --base <branch-name> --dest default在新更改之前重新綁定您的工作分支。就我個人而言,我發現使用命名分支(它永遠不會從我的克隆到上游)成爲管理這種類型工作流程的一種非常好的方式,因爲它可以輕鬆地在上游和我當前的項目之間來回移動,並且在分支機構上承諾不會有任何處罰。

+0

有[更簡單的方法](http://mercurial.selenic.com/wiki/TipsAndTricks#Merge_or_rebase_with_uncommitted_changes)與第一個項目符號相同。 –