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