【问题标题】:Merge only one changeset from another branch仅合并来自另一个分支的一个变更集
【发布时间】:2011-10-30 03:20:29
【问题描述】:

我是 mercurial 的新手,我读到不可能只合并来自另一个分支的单独变更集。 然后我不知道解决这个问题的最佳方法是什么:

  1. 我从稳定版本 R1 开始
  2. 我继续在 R1 上开发:CS1、CS2、CS3
  3. 有时我需要解决我的稳定版本 R1 中的错误。而且我只想应用开发线 (fe CS2) 中的一个变更集

最好的方法是什么?由于合并不起作用,我所做的是制作一个 CS2 补丁,然后将补丁应用到新的稳定分支中以修复错误。这就是 Mercurial 方式?

干杯,

【问题讨论】:

标签: version-control mercurial


【解决方案1】:

transplant extension 将您对单个命令所做的操作自动化。

但我认为首选方法(取决于场景并不总是可行)是首先在 R1 之上进行修复,然后将其合并到您的开发技巧中。

即:

  1. 从稳定版本开始R1
  2. 你做了一些工作,cs1...csN
  3. R1 上稳定需要一个重要的修复,所以你hg update R1
  4. 进行修复,这将产生R2
  5. 回到你离开的地方,hg update csN
  6. 合并稳定,这样你就有了修复,hg merge R2hg commit...
  7. 继续处理csN+1

【讨论】:

  • 满分指出虽然移植是有效的,但它可以作为你一开始做一些次优的事情的后备。如果您注意变更集的父级,则始终可以通过合并获得所需的内容。
  • 此答案已过时,从 Hg 2.0 开始不再需要扩展(请参阅下面的答案)
【解决方案2】:

更新:从 Hg 2.0 起不再需要任何扩展

正如“CAD 家伙”所指出的,这正是 Hg 2.0 中引入的 graft 命令的用途。

源树

最简单的方法是使用SourceTree 之类的 GUI,只需双击 TARGET 分支进行切换,然后在任何其他版本上按鼠标右键并选择“Graft”命令(奇怪的是它可以也是当前分支的修订版)。 如果没有冲突,SourceTree 会立即为当前分支创建一个新的修订版。

乌龟汞

完全一样,选择TARGET Branch,然后rmb过你要嫁接的版本:How to graft with TortoiseHg

命令行

要使用命令行执行此操作,只需切换到 TARGET 分支,然后执行

hg graft -r {revision_number}

{revision_number} 显然是您要合并到当前分支中的修订号。这将在您当前的分支中创建一个新的变更集,其中包含您在命令中使用的修订版中的所有文件。

要了解有关移植命令的更多信息,请阅读stackoverflow 上的此线程

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    相关资源
    最近更新 更多