Mercurial:我如何创建一个未计划的分支

时间:2012-10-25 09:49:04

标签: mercurial branch commit

我的用例是:

我正在开发一项新功能,并且我对该功能进行了多次提交。 由于这是一个次要功能,我甚至没有考虑在功能分支中执行该功能。

然而。现在,我的老板出现并告诉我修复我正在处理的同一分支上的错误(默认)。

要解决这个问题,我想为我的功能创建一个功能分支,将所有现有(未删除)提交推送到该分支。

所以我想在第一次提交之前创建一个分支,然后以某种方式将我的所有提交移动到该分支。

我该怎么做?

3 个答案:

答案 0 :(得分:3)

对于这种情况,您可以通过rebasing进行修复(可能需要在您的配置中启用)。

在您的分支上,在您要移动的更改集之前更新到修订版:

hg up -r<revison>

这假设连续修订需要移动。

创建一个新分支:

hg branch "TempWork"

在其上放置一个虚拟提交以获得新版本:

hg commit -m"New Branch"

然后从您要移动的第一个更改集中执行rebase(它会自动移动后代)并将新的分支修订指定为目标:

hg rebase -s<base revision> -d<new branch revision>

然后更新回主线分支。

答案 1 :(得分:3)

根据您的偏好,有两种方法可以解决这个问题:

  1. 在新的存储库中。

    创建存储库的新克隆,并执行您需要的错误修复。然后在完成后将其推送到主存储库,并继续在原始存储库中停止的位置。拉和合并以照常进行新的更改。

  2. 在现有存储库中。

    在本地更改之前更新到变更集,然后开始修复并提交。这将创建一个新的匿名分支。完成后,使用push -r .进行推送,这只会推送工作副本中包含的更改。在此之后,与您的原始分支(hg merge)合并,并从您离开的地方继续。

    请注意,如果您不熟悉未标记的更改,则可以使用hg bookmark为功能分支添加书签。您还可以使用hg heads轻松找回您留下的任何头部。

  3. 我个人更喜欢在新的干净克隆中工作,因为您不需要担心分支以及在何处留下未提交的更改。但是,如果您的项目设置很复杂,则可以更方便地重用现有的仓库。

答案 2 :(得分:1)

第四种方法:使用mq-patches

  • 您必须启用mq扩展并为repo启动

在修补程序时刻

  • 将feature-commits转换为mq-patches(hg qimport
  • 取消应用集合中的所有修补程序(hg qpop -a
  • 代码修补程序,提交
  • ...
  • 在干净的代码库上完成并测试修补程序
  • 应用集合中的所有修补程序(hg qpush -a),修复可能的冲突
  • 将补丁转换回变更集(hg qfinish
相关问题