Mercurial:如何创建计划外的分支
我的用例是: 我正在开发一个新功能,我对该功能有几次提交。 因为它是一个次要的特性,我甚至没有考虑在特征分支中做这个特性。 不过。现在我的老板过来告诉我修复我正在处理的同一个分支上的错误(默认) 要解决我想为我的功能创建一个功能分支的问题,请将所有现有(未推送)提交推送到该分支中 因此,我希望在第一次提交之前创建一个分支,然后以某种方式将所有提交移动到该分支Mercurial:如何创建计划外的分支,mercurial,branch,commit,Mercurial,Branch,Commit,我的用例是: 我正在开发一个新功能,我对该功能有几次提交。 因为它是一个次要的特性,我甚至没有考虑在特征分支中做这个特性。 不过。现在我的老板过来告诉我修复我正在处理的同一个分支上的错误(默认) 要解决我想为我的功能创建一个功能分支的问题,请将所有现有(未推送)提交推送到该分支中 因此,我希望在第一次提交之前创建一个分支,然后以某种方式将所有提交移动到该分支 如何执行此操作?对于这种情况,您可以通过(可能需要在您的配置中启用)修复它 在分支上,在要移动的更改集之前更新到修订: hg up -r&
如何执行此操作?对于这种情况,您可以通过(可能需要在您的配置中启用)修复它 在分支上,在要移动的更改集之前更新到修订:
hg up -r<revison>
在其上放置一个虚拟提交以获得新修订:
hg commit -m"New Branch"
然后从要移动的第一个更改集执行重基(它会自动移动子体),并将新的分支修订指定为目标:
hg rebase -s<base revision> -d<new branch revision>
hg-rebase-s-d
然后更新回您的主线分支。根据您的偏好,有两种方法可以实现这一点:
push-r.
推送,这将只推送工作副本中包含的更改。在此之后,与原始分支合并(hgmerge
)并继续您离开的地方
请注意,如果您不愿意将更改保留为未标记状态,可以使用hg bookmark
将功能分支标记为书签。您还可以使用hg heads
轻松找到您留下的任何磁头就我个人而言,我更喜欢在一个新的干净的克隆中工作,因为您不需要担心分支和在哪里留下未提交的更改。但是,如果您的项目设置很复杂,那么重用现有的repo可能会更方便。第四种方法:使用mq修补程序
- 您必须为repo启用并启动mq扩展
- 将功能提交转换为一组mq修补程序(
)hg qimport
- 取消应用集合中的所有修补程序(
)hg qpop-a
- 代码修补程序,提交
- 在干净的代码库上完成并测试修补程序
- 应用集合中的所有修补程序(
),修复可能的冲突hg qpush-a
- 将修补程序转换回变更集(
)hg qfinish
hg update-r
到以前的修订版,然后继续编写新的代码“fork”,根据Laurens的建议,+1以前从未使用过-r
,下次我发现自己处于这种情况时,我会尝试一下。当我与SVN合作时,我为项目的每个分支都有一个eclipse工作区。我想我也可以用mercurial来解决这个问题,也许这是解决这个问题最实用的方法。@LasseL:你可以选择最适合你的方式!:)@LaurensHolst—方法1大错特错:克隆的repo将是源代码的完整镜像,使用主repo返回更改是愚蠢的。方法2:a)push-r
不能有参数“”,只有cset ID 2)N-heads分支只能用-f推送,必须先进行合并push@LazyBadger:“大错特错”,老实说?在做出如此强烈的声明之前,请了解更多信息。首先,我不明白你为什么认为克隆人是个问题?这是一个DVCS,利用它对你有利。它是硬链接的,所以如果您担心磁盘空间消耗,请不要担心。2. push-r
最确定的是可以有一个参数
。它是当前工作副本的变更集ID的别名。由于您只推送工作副本的标头,因此不推送多个标头,因此不需要合并正在进行的工作功能分支。请注意,MQ相当复杂,实际上不是标准DVCS流的一部分。这是一个建立在DVCS之上的补丁队列系统。我不推荐新手使用它。此外,它也是一个历史修改操作,对于一些同样可以由标准DVCS流处理的操作。
hg rebase -s<base revision> -d<new branch revision>