从默认情况下获取错误修复程序到Mercurial中的功能分支

时间:2012-06-15 09:39:36

标签: mercurial branching-and-merging

如何将默认分支上的错误修正修复为mercurial中的命名分支? 我最近开始研究一个新功能,所以我认为我会在一个分支中完成这项工作(之前我没有真正做过),所以我可以将更改保留在主要的默认分支之外,直到我完成它们并且该功能已准备好部署。我的想法是我可以更新到默认分支并根据需要应用任何错误修正。

TortoiseHg Branching

现在我想把bug修复到我的命名分支。提示(rev 739)有我希望包含在BoardSummary分支中的更改。我知道我可以合并,但我不想将BoardSummary更改带到默认分支。

我查看了mercurial: apply a bugfix change from stable named branch to dev branch答案,但这对我没有意义。

编辑:我用它来“然后你发现变更集2引入了一个错误”,在我的情况下我回到732修复了错误并提交了(默认情况下)。我的想法是在我分支之前修复已经到位。但是现在如何在不将两个分支合并在一起的情况下将其修复到738?看起来这个bug实际上是在739中修复的 - 所以还没有在BoardSummary分支中。这似乎是第二棵树在答案中显示的内容,但第三张图解释为“你会改为做” - 我不明白那一点

2 个答案:

答案 0 :(得分:7)

显然,默认分支只包含 BoardSummary 分支中不存在的一个变更集。您应该将默认合并到 BoardSummary 中,而不是相反。这样, BoardSummary 将有修复, BoardSummary 中没有一个将在默认中。

总结:

$ hg up BoardSummary
$ hg merge default
$ hg commit -m "Merge the fix for #247"

解释

可以使用多种分支。最常见的是:

  • 用于维护已发布版本的稳定(生产)分支,
  • 默认(主,主干)分支,包含或多或少稳定的开发活动,
  • 功能分支,不够成熟,无法合并到主干中。

这里的主要想法是从稳定到默认,从默认到功能合并始终是安全的。这意味着就变更集而言,任何稳定分支都是默认的子集,而默认是功能分支的子集。

例如,您正在功能分支 new-dal (主要功能)中重新设计数据访问级别。与此同时,您在默认(次要功能)中添加了几个新报告,并找到并修复了 1.0-stable 中的错误。好吧,只需合并从最旧到最新的分支( 1.0-stable - > 默认 - > new-dal ),就是这样。

这在Mercurial wiki上得到了很好的解释:Standard Branching: Release branches

您的案例

在您的情况下, BoardSummary 显然是一个功能分支,因此您可以毫不犹豫地将默认值合并到其中。只有在您准备将新功能集成到默认功能时才能完成相反的操作。

答案 1 :(得分:0)

首先,您应该从历史记录中回滚/删除提交739(这是您的修复)。然后你在r732上提交修复程序。这将创造一个新的头,应该是新的r739。您的历史记录应如下所示:

  r329
    |
--r232-----default branch
       \
        \
         feature branch

现在将新头(r329)合并到默认分支和功能分支中。现在历史应该看起来像链接答案中的最后一棵树。