[英]Mercurial: Back out public changesets and reapply to new public branch?
我們正在使用Kiln和Fogbugz; 窯應該無縫地允許git和hg一起工作。 但是,我們遇到了一個問題,即git分支被當作書簽保存。 直到推動更改,我們才在回購中發現了這一點,現在分支已經被污染了。
我在默認分支中有公共變更集,應該在自定義分支中。 我可以撤消它們,但是我需要將它們重新應用於其他公共分支。 我擔心變基,因為這些是公共更改。
處理這種情況的最佳方法是什么?
編輯:我以為我可以使用Mercurial隊列將變更集轉換為補丁,但是變更集是不可變的,因為它們是公開的。 由於類似的原因,我也不能做汞剝離。
在Mercurial中,您可以使用hg graft
將變更集(有時也稱為Cherry Pick )從一個地方復制到另一個地方。 當錯誤修正是偶然地提交到錯誤分支時,通常用於將錯誤修正移植回維護分支。
您可以這樣使用它:
$ hg update correct-branch
$ hg graft your-commit
這將把your-commit
重新創建為correct-branch
的子correct-branch
,類似於將your-commit
導入到MQ中,彈出補丁,更新為correct-branch
並推送補丁。 嫁接的好處是它將在內部使用三向合並來為您提供更好的沖突解決方案。 hg rebase
工作原理實際上是相同的。
我想將torek的評論提升為一個完整的答案,以使其更明顯。
正如他所指出的那樣,當mercurial認為變更集已公開時, hg phase
命令(帶有--force標志)可以修復這種情況。 當然,您要非常確定是否首先共享它是正確的。
我遇到了一個小故障,在該故障中,mercurial將未推送的分支標記為公共,這使得使用qimport輕松修復(或可能使用了strip)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.