23

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

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

4

2 回答 2

30

不,没有。

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

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

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

于 2012-08-31T12:19:05.383 回答
0

主意:

就在将我的合并功能分支推送到远程服务器之前,我想:“我不希望任何人知道我的分支,我希望它从未存在过”。因此,我决定在推送到远程之前将所有本地更改放入一个提交中。

方法:

  1. 将原始存储库和分支存储库克隆到单独的目录中:

    hg clone ssh://site//hg/repository repository-origin
    hg clone /home/user/work/repository repository-branch
    
  2. repository-branch中合并默认功能分支:

    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. 使用单个提交合并从功能分支到主分支的所有更改:

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

在最后一个提交消息中包含来自不需要的分支的所有/某些提交的信息可能会很好。

优点缺点:

  • 适用于未推动的分支
  • 将提交压缩在一起并丢失信息
  • 无需扩展
于 2014-12-09T15:14:48.077 回答