合并后如何删除Mercurial分支

时间:2012-08-31 10:10:20

标签: mercurial

我正在为我的应用程序中的新功能创建命名的Mercurial分支,在完成特定功能后,我将该分支合并到默认分支,并关闭此功能分支。

但我想知道是否有办法完全删除那些已命名的分支,而不会丢失合并到默认分支的更改?

2 个答案:

答案 0 :(得分:29)

没有。

合并两个分支时,合并提交取决于其两个父提交的存在。这意味着您无法删除构成合并分支的提交,除非您还删除了您不想要的合并提交。

这也不是做事情的“Mercurial方式”。当分支已合并到另一个分支,并且在该分支上没有进一步开发时,Mercurial会认识到该分支不再处于活动状态; hg branches会将这些不活动的分支放在列表的底部。您还可以使用hg commit --close-branch关闭分支,这将从hg branches列表中删除分支(除非给出-c参数)。

听起来你应该查看Mercurial队列(MQ),因为它支持与你描述的类似的工作流程。例如,您可以设置多个MQ队列,每个队列代表一个开发分支。

答案 1 :(得分: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. 使用存储库分支文件(隐藏的文件除外)覆盖 master 中的所有文件:

    rsync -av --exclude=".*" repository-branch/ repository
    
  5. 通过单次提交将 feature 分支的所有更改合并到 master

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

  7. 在最后一次提交消息中从不需要的分支中获取所有/一些提交信息可能是件好事。

    优点/缺点:

    • 适用于未分支的分支机构
    • 南瓜一起提交并失去信息
    • 无需扩展