2011-09-14 20 views
6

我有一個未提交的變更集。我注意到我目前在錯誤的分支上,所以在我提交這個之前,我想切換到我打算的分支,然後提交。Hg幾乎致力於錯誤的分支

這在汞中難以實現嗎?

+0

我相信Mercurial和Git非常相似。所以我相信你有兩個選擇。手動保存您添加和更改的所有文件,切換分支,然後將其複製到文件系統的頂部。或者在當前分支中提交更改,切換到您真正想要的分支並從前一分支進行合併。 –

回答

5

如果當前父修訂和目標之間調整的線性路徑,那麼你可以只發出

hg update right-branch 

和Mercurial會在你的工作副本的修改合併到目標版本。

這是通過使用完整合並工具機器來完成的,因此可以考慮重命名之類的事情,如果發生衝突,您將得到一個三向合併程序。基於擱置和差異的方法缺少這一點,需要您使用.rej文件手動修復衝突。您甚至可以通過hg resolve --list查看當前合併狀態,並自Mercurial爲您進行必要備份後重新合併所選文件。

如果沒有直線路徑,你會得到這樣的警告:

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

那麼你可以得到你想要通過先更新回到一個共同的祖先,然後再次更新着什麼。我不是100%確定我們爲什麼發出此警告,但如果您好奇,搜索郵件列表存檔應該會給您答案。

2

如果您正在使用TortoiseHg,它很容易實現與THG的貨架能力(http://tortoisehg.bitbucket.io/manual/2.9/shelve.html)。在提交對話框中,只需點擊Shelve按鈕(其圖標是疊加Z的文件),然後雙擊右箭頭以擱置所有更改。關閉擱置對話框,更新到正確的更改集,打開擱置對話框,然後單擊雙左箭頭取消擱置它們。

如果您不使用THG,您可以安裝hgshelve擴展名(https://www.mercurial-scm.org/wiki/ShelveExtension),但我並不熟悉它。

似乎你也可以用Mercurial隊列(http://mercurial.808500.n3.nabble.com/Shelve-extension-td802439.html)獲得相同的結果。

3

如果你想做到這一點沒有貨架擴展,做到以下幾點:

hg diff --git > ../work_in_progress.patch 
hg up desired-branch 
hg import --no-commit ../work_in_progress.patch 

哪裏../work_in_progress.patch可以是你想要的任何路徑(我通常只存儲上面我的倉庫我的補丁)和desired-branch是您實際上想要將更改應用到的分支。

請注意,如果您正在使用的分支和您要使用的分支足夠不同,以至於您的補丁程序無法順利應用,那麼我發現的任何解決方案都會開始崩潰。在這種情況下,您開始需要手動解決衝突。