3

我的用例是这样的:

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

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

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

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

我怎样才能做到这一点?

4

3 回答 3

3

对于这种情况,您可以通过变基(可能需要在您的配置中启用)来修复它。

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

hg up -r<revison>

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

创建一个新分支:

hg branch "TempWork"

将一个虚拟提交放到它上面以获得新的修订:

hg commit -m"New Branch"

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

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

然后更新回您的主线分支。

于 2012-10-25T10:08:08.620 回答
3

有两种方法可以解决这个问题,具体取决于您的偏好:

  1. 在一个新的存储库中。

    为您的存储库创建一个新的克隆,并在那里进行您需要的错误修复。完成后将其推送到主存储库,并从原始存储库中的中断处继续。像往常一样拉并合并以获取新的更改。

  2. 在现有存储库中。

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

    请注意,hg bookmark如果您不喜欢不标记更改,您可以为功能分支添加书签。此外,您还可以使用hg heads.

就个人而言,我更喜欢在新的干净克隆中工作,因为您无需担心分支以及在何处留下未提交的更改。但是,如果您的项目设置很复杂,那么重用现有的 repo 可能会更方便。

于 2012-10-25T12:19:13.090 回答
1

第四种方法:使用 mq-patches

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

在修补程序时刻你

  • 将功能提交转换为一组 mq 补丁 ( hg qimport)
  • 取消应用 set ( hg qpop -a)中的所有补丁
  • 代码修补程序,提交
  • ...
  • 在干净的代码库上完成并测试修补程序
  • 应用 set ( hg qpush -a) 中的所有补丁,修复可能的冲突
  • 将补丁转换回变更集 ( hg qfinish)
于 2012-10-25T14:57:03.390 回答