2013-07-12 17 views
3

[我將我的問題標記爲mercurial,但實際上,我提出了一個概念性問題,也適用於其他源代碼管理應用程序。]假設您有一個包含版本控制下應用程序源代碼的文件夾;稱它爲主幹。我克隆版本庫並開始修改代碼,處理新版本的程序,修改後提交修訂版本,這些版本永遠不會成爲主幹的一部分。合併選定的變化

然後有一天,在修訂23上工作,我發現一個錯誤。

我提交它,如修訂24.

我希望你有我的bug修復,沒有我所做的所有其他更改。將修訂版24的代碼(錯誤修復)推送或合併回主幹的一般步驟是什麼?

回答

4

在水銀,你有幾種選擇(我敢肯定,其他DVCS的具有類似能力)

最簡單的方法:一旦你意識到這個bug所屬的主線樹幹,您更新到主線提示,提交,推送,然後將該changset合併到您的副項目中。

hg up -r mainline 
# make your changes 
hg com -m "I fixed the bug" 
hg push -r mainline ## now others can pull it! 
hg up -r sideproject 
hg merge mainline 
hg com -m "merge mainline bugfix into sideproject" 

完成。

通過使用mq擴展名或導出補丁,有許多方法可以讓您編輯歷史記錄以獲得類似的結果,但它們都只是試圖在事實之後完成上述方法。

變更集帶有它的所有祖先變化。因此,您需要將主線更改(修訂版24)從您的側面項目(轉到23)進行拓撲分離。

+0

這是一個很好的答案。我來到這裏認爲有人會說「使用'hg graft'」,只有當您已經在非主分支中進行提交時,這纔是正確的答案。如果您還沒有完成提交,請在main/master/trunk/release中執行,然後完全按照該答案所述將其合併到您的側面/功能分支中。 'mq'永遠不是答案。 :) –