我可以在BitBucket(Mercurial)中为旧提交创建一个新分支吗?

时间:2017-10-28 21:20:35

标签: mercurial atlassian-sourcetree

我已经尝试找到我想要分支的提交但我无法看到任何创建分支的选项。

我也尝试过创建一个分支,但是我看不到任何选择旧提交的方法。

此问题与my question about pushing a new branch

有关

1 个答案:

答案 0 :(得分:0)

TL; DR

使用hg update -r <rev>检查您想要成为新分支的父级的修订。然后,在下一个hg commit之前的任何时间,使用hg branch <new-branch-name>记录您要创建的分支的名称。进行您想要的任何更改,然后运行hg commit以创建一个创建分支的新提交。新提交将是新分支中的唯一提交,并且将成为该分支的头部(单数)。

更长的描述

(注意:我只能回答有关命令行选项的问题,因为我没有使用花哨的GUI。)

在Mercurial中,您可以通过以下方式创建分支:

  1. hg branch与分支名称一起使用:

    hg branch newbranch
    

    Mercurial将回复:

    marked working directory as branch newbranch
    (branches are permanent and global, did you want a bookmark?)
    

    (如果已经有default以外的分支,则省略第二句。

  2. 进行新的提交。

  3. 在执行第2步之前,您所做的分支是&#34; hg branch不存在:它只是分支的想法。这个想法与工作树的状态一起保存。

    请注意,无论何时创建新提交,新提交都有父提交(或者在结束合并时偶尔会有两个父提交)。新提交的父级的ID是当前提交的ID,即修订版.。这就是您必须首先更新到所需修订版的原因。

    工作树实际上是提议的提交。但是,除非您使其与当前提交不同,否则不会提交更改集。 (如果您熟悉Git,这与其内部结构类似,但存在一些关键差异。在Git中,当前修订版名为HEAD而不是.,而不是工作树作为提议的提交,Git使用它的&#34;索引&#34;作为提议的提交。更重要的是,在Git中,提交同时在一些不同的分支上,所以除了两个特殊情况,Git创建分支名称这是因为新的分支和旧分支共享所有旧分支的提交 - 一种特殊的疯狂,尽管最终都会解决这个问题。 )

    这显示在hg summary的输出中,其中描述了:

    • 如果您现在提交了新变更集的父级ID,即修订版本.的修订ID;
    • 当前分支的名称(分支本身可能尚不存在);
    • 与修订版.相比的工作树状态;
    • 距当前分支(包含.的分支)的当前头部距离.;
    • 草案和秘密阶段提交的数量,如果有的话;
    • 以及一些可选的附加信息。

    Mercurial中的 head 是在同一分支中没有后代提交的任何提交。更新到本身不是头部的旧版本,然后创建新的提交,将自动创建一个新头,将头数增加一。如果新头部在现有分支中,则现有分支的头部数量同样增加一个。如果新头部导致创建新分支,则新分支现在会存在并且有一个提交,这是一个头部提交。

    要创建一个新的命名分支,最后一个就是你想要的。因此,您需要更新到起始修订版 - 如果您愿意,这可以是现有的分支头 - 然后切换到新分支,但实际上还不存在。然后,您可以进行提交以创建分支,其单个修订版是新分支的头部。 (如果之前的提交是旧分支的一个或者,那么它仍然是一个头。)