Mercurial/hg:将更改从分支转移到主干

Mercurial/hg:将更改从分支转移到主干,mercurial,merge,Mercurial,Merge,显然,我已经把过去几周的提交检查到了一个分支。除了对一个文件的更改外,我还想将所有内容提交到主干。我该怎么办?如果没有推出新分支的任何变更集,并且分支中没有合并,则可以使用mq扩展将主干中不需要的变更集移动到分支的尖端 $EDITOR ~/.hgrc [extensions] mq = «save+quit» # import all revisions up to the unwanted rev into a patch queue hg qimport -r$BRANCH_TIP_REVI

显然,我已经把过去几周的提交检查到了一个分支。除了对一个文件的更改外,我还想将所有内容提交到主干。我该怎么办?

如果没有推出新分支的任何变更集,并且分支中没有合并,则可以使用mq扩展将主干中不需要的变更集移动到分支的尖端

$EDITOR ~/.hgrc
[extensions]
mq =
«save+quit»
# import all revisions up to the unwanted rev into a patch queue
hg qimport -r$BRANCH_TIP_REVISION:$IN_TRUNK_UNWANTED_REVISION

# edit the order of the patches, so that the unwanted patch is the last patch
$EDITOR .hg/patches/series
  «Move the in trunk unwanted patch to the last line of the file»
# Variant 1: don't change the branch
hg qpush -a    # apply all patches
hg qfinish -a  # finish all patches to regular hg changesets
hg log -l2     # find out the revision number of the latest revision you want in trunk
hg up -r trunk # checkout trunk
hg merge -r $LATEST_WANTED_REVISION_NUMBER # merge only the wanted changesets

# Variant 2: *All* patches are on the new branch, and
# you want only the differing changeset on the new branch
hg up -r trunk # move the working copy to trunk
hg qpush -a    # apply all patches
hg qpop        # unapply the unwanted one
hg qfinish     # finish the applied patches
hg branch $OLD_BRANCH_NAME # switch the working copy to the new branch
                           # if there is already another branch of this name,
                           # you need to checkout the other branch, apply the
                           # patch and merge trunk into that branch afterwards.
hg qpush       # apply the branch-specific patch
hg qfinish -a  # finish the patch
当您与Mercurial讨论命名分支时,您讨论的是变更集上的永久属性。变更集不能位于不同的分支上,并且仍然是相同的变更集。您可以(如@Matt Ball)建议将该分支的结果合并为默认值:

hg update default
hg merge thebranchname
或者,你可以经历疯狂的、破坏历史的扭曲,假装这些更改不是在分支上完成的(如@Rudi details(对不起))


现在就合并,将来考虑使用书签、匿名分支或单独的克隆,以便不立即执行的工作——没有一个在变更集上永久注释。

将分支合并到主干中是一个可接受的解决方案吗?我只是这么做了,但当我不得不手动合并配置文件时,我会付钱。有趣的是,涉及MQ的解决方案总是以一个复杂、多步骤的过程结束:)因为hg遵循“如果没有必要,不要重写历史”的原则,hg故意不让它变得特别容易。重写历史以重新排序涉及分支的任意变更集是一项相当大的手术。使用MQ实际上使这个过程不那么容易出错。