我的用例是:
我正在开发一项新功能,并且我对该功能进行了多次提交。 由于这是一个次要功能,我甚至没有考虑在功能分支中执行该功能。
然而。现在,我的老板出现并告诉我修复我正在处理的同一分支上的错误(默认)。
要解决这个问题,我想为我的功能创建一个功能分支,将所有现有(未删除)提交推送到该分支。
所以我想在第一次提交之前创建一个分支,然后以某种方式将我的所有提交移动到该分支。
我该怎么做?
答案 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)
根据您的偏好,有两种方法可以解决这个问题:
在新的存储库中。
创建存储库的新克隆,并执行您需要的错误修复。然后在完成后将其推送到主存储库,并继续在原始存储库中停止的位置。拉和合并以照常进行新的更改。
在现有存储库中。
在本地更改之前更新到变更集,然后开始修复并提交。这将创建一个新的匿名分支。完成后,使用push -r .
进行推送,这只会推送工作副本中包含的更改。在此之后,与您的原始分支(hg merge
)合并,并从您离开的地方继续。
请注意,如果您不熟悉未标记的更改,则可以使用hg bookmark
为功能分支添加书签。您还可以使用hg heads
轻松找回您留下的任何头部。
我个人更喜欢在新的干净克隆中工作,因为您不需要担心分支以及在何处留下未提交的更改。但是,如果您的项目设置很复杂,则可以更方便地重用现有的仓库。
答案 2 :(得分:1)
第四种方法:使用mq-patches
在修补程序时刻
hg qimport
)hg qpop -a
)hg qpush -a
),修复可能的冲突hg qfinish
)