Mercurial:在分支中的特定变更集之后添加更改并合并它

时间:2014-09-11 15:37:28

标签: merge mercurial branch

首先让我解释一下情况。 前一段时间我有硕士和功能分支。然后在构建master分支并将其发送到生产之后,我将功能分支与主分支合并。所以我现在只有主分公司。很多提交后,我收到了将修复/功能添加到生产中的代码的请求。所以我找到了在与功能分支合并之前的特定变更集,我需要添加某些代码,但仍保留在主分支中。

现状:

master   --1-------o--P--X----2--o--o--o--*
            \                /
feature      o--o--o--o--o--o

Changeset P是正在生产的,并且X是我需要添加修复并再次推送到生产的地方。在那之后,我需要我的提示包含所有+ X。

所以在master分支中我必须:

  • 与功能分支合并之前的所有内容
  • 修复

使用此存储库状态,我们可以将构建推送到生产。完成此操作后,我需要添加今天所做的所有更改并与这些新更改合并,以便我得到:

  • 与功能分支合并之前的所有内容
  • 与功能分支合并后的更改
  • 修复

现在我可以继续处理所有更改。

我使用的是Mercurial,但我并不精通它。

我欢迎任何见解或帮助。

祝你好运

3 个答案:

答案 0 :(得分:0)

如果我说得对,那么你想要的第一部分就在这个图表中表示:

release-2 --------F'
                 /
master  --o--o--P--o--m--o--o--tip
                     /
                    /
feature --o--F--o--o

其中P是用于生产的变更集,F是您希望移植到生产版本的功能,m是分支的合并。

以这种方式移植变更集称为cherry picking。这样做的一种方式是:

  1. hg up P#use changeset for P
  2. hg branch release-2#optional,否则master将有2个头
  3. hg graft -r F#use changeset for F
  4. 然后F'就是你的新版本(经过测试后)。

    我不明白你问题的第二部分,你显然想将东西移到F'上。为什么不从当前的提示继续工作?您的下一个版本将在未来的某个变更集中被作为主人的另一个分支。

    我建议你在真正做之前尝试一下测试回购。 [学习如何使用任何新的hg命令都是如此。]

答案 1 :(得分:0)

用简单的话说:

  • 移至历史所需的“注入点”
  • 进行必要的更改,提交
  • 测试新的tip(某种程度上)
  • (如果需要,添加修补程序)
  • 将您当前的tip与“旧”提示合并(master的第2位)

在Mercurial命令中

  • hg up X
  • 在这里编码......
  • hg commit -m "description of change"
  • hg archive PATH/TO/ARCHIVE_FOR_PROD
  • 在这里测试......
  • hg merge(没有-r,因为你在分支中合并两个头)
  • hg resolve如果需要用于解决冲突,互动合并将是更好的选择)
  • hg commit -m "Merge added feature"

答案 2 :(得分:0)

为我解决这个问题是:

  1. 在实现功能分支之前恢复到修订版(到P变更集)并提交它
  2. 添加了修复并提交了
  3. 用于退出以取消从步骤1恢复
  4. 合并更改并提交
  5. 所以在第2步之后,我得到了生产+修复的所有代码。然后我使用第3步回到原来的状态,并将变更集与修复程序合并。所以最后我得到了所有带有功能+修复的代码。