我的用例是这样的:
我正在开发一项新功能,并且对该功能进行了多次提交。由于它是一个次要功能,我什至没有考虑在功能分支中执行该功能。
然而。现在我的老板过来告诉我在我正在处理的同一分支上修复一个错误(默认)。
要解决这个问题,我想为我的功能创建一个功能分支,请将我所有现有的(未推送的)提交推送到该分支中。
所以我想在我第一次提交之前创建一个分支,然后以某种方式将我所有的提交移到那个分支。
我怎样才能做到这一点?
对于这种情况,您可以通过变基(可能需要在您的配置中启用)来修复它。
在您的分支上,更新到要移动的更改集之前的修订:
hg up -r<revison>
这假设需要移动连续的修订。
创建一个新分支:
hg branch "TempWork"
将一个虚拟提交放到它上面以获得新的修订:
hg commit -m"New Branch"
然后从要移动的第一个更改集执行变基(它会自动移动后代)并将新分支修订指定为目标:
hg rebase -s<base revision> -d<new branch revision>
然后更新回您的主线分支。
有两种方法可以解决这个问题,具体取决于您的偏好:
在一个新的存储库中。
为您的存储库创建一个新的克隆,并在那里进行您需要的错误修复。完成后将其推送到主存储库,并从原始存储库中的中断处继续。像往常一样拉并合并以获取新的更改。
在现有存储库中。
在您的本地更改之前更新到变更集,然后开始在那里修复和提交。这将创建一个新的匿名分支。完成后,使用 推送push -r .
,这只会推送包含在工作副本中的更改。在此之后,与您的原始分支 ( ) 合并hg merge
并从您离开的地方继续。
请注意,hg bookmark
如果您不喜欢不标记更改,您可以为功能分支添加书签。此外,您还可以使用hg heads
.
就个人而言,我更喜欢在新的干净克隆中工作,因为您无需担心分支以及在何处留下未提交的更改。但是,如果您的项目设置很复杂,那么重用现有的 repo 可能会更方便。
第四种方法:使用 mq-patches
在修补程序时刻你
hg qimport
)hg qpop -a
)中的所有补丁hg qpush -a
) 中的所有补丁,修复可能的冲突hg qfinish
)