【问题标题】:Mercurial - close default branch and replace with a named branch as new defaultMercurial - 关闭默认分支并将命名分支替换为新默认分支
【发布时间】:2013-02-20 16:22:33
【问题描述】:

在一个 mercurial 存储库中,“默认”分支已经过时,以至于合并来自“开发”的更改不再有意义,“开发”是一个具有应用程序最新部署版本的命名分支.

我怎样才能关闭当前的默认分支,然后使用develop的头创建一个新的默认分支,而不是将develop合并到默认分支?

我看到了一些其他类似的问题和答案,也许相同,但我仍然无法理解这应该如何工作。

谢谢!

【问题讨论】:

  • 或者,您可以将update 设置为默认值,将merge 设置为develop,但在提交合并之前,您可以将其设置为develop 的精确副本。
  • 这确实可行,但我该怎么做呢?

标签: mercurial branching-and-merging


【解决方案1】:

如果defaultdevelop 有所不同,并且您希望default 在合并后与develop 完全相同,则您需要一组与 Edward 给您的命令稍有不同的命令(这也将在developdefault 的直系后代的情况下工作。

hg update -C default
hg -y merge --tool internal:fail develop
hg revert --all --no-backup -r develop
hg resolve --all --mark
hg commit -m "merge updating default to current develop"

这意味着任何冲突都会导致未解决的合并。然后,您将 所有内容 恢复为与 develop 分支上的相同(没有备份,因此您不会留下大量 .orig 文件)。

【讨论】:

  • 蒂姆这工作得很好。谢谢你的帮助!通过查看您和 Edward 的答案,我刚刚学到了很多关于 hg 的知识。
  • 这是一个更好的解决方案!谢谢!
【解决方案2】:

根据您的评论,不需要关闭分支,这里有一系列步骤应该使默认分支与开发分支保持一致:

  1. hg update default
  2. hg merge --tool internal:other -- 在开发分支特权时合并
  3. hg diff -r develop -- 与 develop 比较以确保您拥有准确的副本
  4. hg commit -m "merge updating default to current develop"

完成后,您应该有一个更新的默认值,以反映开发分支,使它们重新同步。

【讨论】:

  • 爱德华谢谢你的回答。我测试了您的流程并在第 2 步得到了以下结果: abort: branch 'default' has one head - please merge with an explicit rev.在我的回购中,由于其他几个活跃的命名分支,有超过 2 个头。无论如何,这个最初的解决方案显然得到了成功,所以再次感谢。 hg diff -r 也是我从未见过的有用命令。
【解决方案3】:

我认为最好用 Tortoisehg 中的一个概念来解释它是如何工作的。

  • hg update开发分支
  • 选择默认分支的头,并选择与本地合并
  • 然后选择discard all changes from merge target (other),这样默认就合并到develop而不影响develop
  • 然后从develop的头分支到default,使用hg branch default,default再次重启

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 2012-06-09
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    相关资源
    最近更新 更多