【问题标题】:Mercurial via TortoiseHg - Merge a named branch then close itMercurial via TortoiseHg - 合并一个命名分支然后关闭它
【发布时间】:2011-02-01 00:05:09
【问题描述】:

我有一个名为 NewFeature 的分支,它是由默认分支创建的。我已经对该分支进行了几次提交,现在我想合并它以重新加入默认分支。

现在(每个字母都是一个提交):

   default: A---B
NewFeature:      \--C---D

我想要什么:

   default: A---B-----------E
NewFeature:      \--C---D--/

我尝试右键单击目录并选择“Hg Commit...”。然后我选择了“关闭当前命名分支”。我收到了这个错误:abort: can only close branch heads

我还在存储库资源管理器中寻找了“关闭分支”选项,但我找不到任何东西。

有人可以帮忙吗? 提前致谢!

编辑:我向 TortoiseHg 发布了 issue

【问题讨论】:

    标签: mercurial tortoisehg


    【解决方案1】:

    您给出的示例更像是合并而不是真正的关闭。此外,如果就这么简单,您可能不想/不需要创建命名分支。

    但是如果你真的想通过 TortoiseHg 关闭一个分支,例如

    1. 您创建了 NewFeature 分支
    2. 然后 Default 分支和 NewFeature 分支都被修改了
    3. 那么,如果 NewFeature 分支花费了相当长的时间,您可能已经多次将 Default 合并到 NewFeature 中(以避免在最终将 NewFeature 分支合并到 Default 分支时出现太多差异)
    4. 最终您的新功能已完全实现或足够稳定,您将 NewFeature 分支合并到默认分支中

    从现在开始,任何人都不应该在 NewFeature 分支上提交任何东西,所以你想关闭它。

    你可以在 TortoiseHg 中这样做(我有 2.3.2 版):

    1. 当您在您的 NewFeature 分支上时,点击 Hg Commit...(无需提交任何内容 - 或者您在最终合并时完成)
    2. 点击“Branch: NewFeature”(在顶部以粗体显示)
    3. 选择“关闭当前分支”

    【讨论】:

    • 这对我有帮助,但我想它在版本 2 和 3 之间看起来一定不同。我必须在对话框中单击,您将在其中输入步骤 1 的提交消息,尽管也许这就是您的意思.
    【解决方案2】:

    要合并,您需要一个干净的工作副本 - 没有未提交的更改。合并将放置在工作副本中以供审核,然后您提交工作副本以“完成”合并。

    如果您有未准备好提交的未提交更改,您可以查看暂时搁置这些更改(如果您有适当的扩展名)或在其他地方签出新的工作副本以用于合并。

    使用存储库资源管理器:

    1. Update 将工作副本转为 rev B

    2. 在修订历史记录中选择 rev D 行。

    3. 右键单击 rev D 并选择 Merge with...。对话框应该显示 rev B 应该是本地 rev,D 应该是另一个 rev。

    4. 在合并对话框中单击Merge 并解决任何冲突(如果有)。

    到目前为止,存储库中没有任何更改 - 您的合并在工作副本中。因此,如果出现问题,您可以取消合并,恢复您的工作目录,然后在稍后或在进行其他一些额外的分支或主干更改之后重新开始。

    如果在步骤 1-4 之后一切正常,请在合并对话框中单击 Commit 以提交合并。

    【讨论】:

    • 如果您确实还需要将分支“NewFeature”标记为已关闭,请在 Bert F recipie 的第 1 步之前再执行一步:留在修订版 D 的工作副本中,从对话框中选择“关闭当前分支”,您可以使用“提交”按钮从行中心的分支选择器打开,写下“NewFeature done”之类的注释,然后按“提交”。
    • 之后,您可以将这个关闭的分支合并到分支“默认”,如下所述 Bert F
    【解决方案3】:

    对于对此问题的答案感到困惑的任何人,以下是有关如何在 TortoiseHg 工作台中执行此操作的说明:

    如何合并特征分支和关闭分支

    1. 打开 TortoiseHg 工作台。
    2. 从 Registry Repository 中选择您的存储库。
    3. 切换到您希望将分支合并到的分支(本例中为默认):

    1. 用鼠标右键单击要合并和关闭的分支(本例中为 NewFeature)并选择与本地合并。这会将来自NewFeature 分支的分支更改合并到default

    1. 您将看到一个确认框,确认您的更改将从一个分支合并到另一个分支,单击步骤下一步,立即提交并完成

    1. 现在您可以从图表中看到更改已被合并,我们现在可以关闭 NewFeature 分支,因为我们不再需要它:

    1. 将您的本地更新为您要关闭的分支,在本例中为NewFeature

    1. 单击提交,即工作台顶部的绿色大勾号。

    2. 在提交窗口中,您应该会在注释文本框上方看到要关闭的分支。点击分支名称:

    1. 会弹出一个窗口,选择关闭当前分支

    1. 现在单击提交。您的图表应显示分支已关闭:

    【讨论】:

      【解决方案4】:

      在 TortoiseHg 中,在使用提交对话框之前,您的工作副本必须更新到要关闭的分支的顶端。

      关闭分支将在分支提示之上创建一个新的变更集。

      您描述的错误 (abort: can only close branch heads) 通常发生在您更新到不在命名分支顶端的变更集时。

      【讨论】:

      • 我已经做到了。为了确保,我在存储库资源管理器中右键单击“D”提交并选择“更新...”(带有“放弃本地更改”)。然后我右键单击存储库目录,选择“Hg Commit ...”,然后选择“关闭当前命名分支”。我点击提交,同样的错误弹出。
      • @sharoz:我的下一步是从命令行尝试这个。 hg --debug commit --close-branch -m "Closing branch"。如果debug 输出没有告诉您任何信息,那么我会尝试hg update --clean 以确保绝对确定。
      【解决方案5】:

      你似乎也得到这个错误是分支已经关闭,即试图关闭一个关闭的分支。更有用的错误消息会很有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-13
        • 1970-01-01
        相关资源
        最近更新 更多