2012-08-31 52 views
20

我正在爲我的應用程序中的新功能創建命名的Mercurial分支,並且在完成特定功能後,我將該分支合併到默認分支中,並關閉此功能分支。如何在合併後刪除Mercurial分支

但我不知道是否有辦法完全刪除那些命名分支,而不會丟失合併到默認分支的更改?

回答

29

不,沒有。

當你合併了兩個分支時,合併提交依賴於它的兩個父提交的存在。這意味着你不能刪除組成合並分支的提交,除非你也刪除了你不想做的合併提交。

這也不是「Mercurial way」做事情。當一個分支合併到另一個分支中,並且該分支沒有進一步的開發時,Mercurial認識到該分支不再活躍; hg branches會將那些不活動的分支放在列表的底部。您也可以使用hg commit --close-branch關閉分支,該分支將從hg branches列表中刪除分支(除非給出-c參數)。

聽起來你應該看看Mercurial隊列(MQ),因爲它支持類似於你所描述的工作流程。例如,您可以設置多個MQ隊列,每個隊列都代表一個開發分支。

+7

你的回答是近乎完美的(我已經upvoted它)但@lvica應該在MQ之前查看書籤。 MQ很難。這是一個真正的powertool,現在它已經失寵了,現在階段(並且很快就已經過時了)在這裏。另一方面,書籤非常適合每個功能分割,永久命名的分支可能是矯枉過正的。 –

+0

@ Ry4an是的,我忘了他們(因爲我從來沒有用過它們)。你如何處理書籤合併後的刪除? –

+1

您只需使用'hg bookmark --delete bookmark_name'刪除書籤。很多很棒的信息在這裏:http://mercurial.selenic.com/wiki/Bookmarks/ –

0

想法:

只是推我的合併特性分支到遠程服務器之前,我想:「我不想讓任何人知道我的分支,我寧願它從未存在過」。所以我決定在推送到遠程之前將所有本地更改放入一個提交中。

方法:

  1. 克隆起源分支倉庫到單獨的目錄:

    hg clone ssh://site//hg/repository repository-origin 
    hg clone /home/user/work/repository repository-branch 
    
  2. 合併默認特徵內部庫分支分支:

    cd repository-branch 
    hg merge feature-branch 
    hg commit -m "feature-branch: merging into default" 
    cd .. 
    
  3. 創建庫:

    hg clone repository-origin repository 
    
  4. 覆蓋所有文件在庫分支文件(不包括隱藏的):

    rsync -av --exclude=".*" repository-branch/ repository 
    
  5. 合併所有陳從功能分支 GES單承諾:

    cd repository 
    hg commit -m "feature-branch: merging into default" 
    
  6. 推到遠程

這可能是件好事,所有的/部分提交免受不必要的分支的最後一個內部消息提交消息。

優點/缺點:

  • 作品unpushed分支
  • 南瓜承諾一起,丟失信息
  • 沒有擴展需要