Answers:
正如Mark所建议的那样,MqExtension是您解决问题的一种解决方案。恕我直言,一个更简单的工作流程是使用rebase扩展。假设您有这样的历史记录:
@ changeset: 2:81b92083cb1d
| tag: tip
| summary: my new feature: edit file a
|
o changeset: 1:8bdc4508ac7b
| summary: my new feature: add file b
|
o changeset: 0:d554afd54164
summary: initial
这意味着修订0
是您开始使用功能的基础。现在,您要1-2
在命名分支上进行修订,例如my-feature
。更新至修订版0
并创建该分支:
$ hg up 0
$ hg branch my-feature
$ hg ci -m "start new branch my-feature"
现在的历史如下:
@ changeset: 3:b5939750b911
| branch: my-feature
| tag: tip
| parent: 0:d554afd54164
| summary: start new branch my-feature
|
| o changeset: 2:81b92083cb1d
| | summary: my new feature: edit file a
| |
| o changeset: 1:8bdc4508ac7b
|/ summary: my new feature: add file b
|
o changeset: 0:d554afd54164
summary: initial
使用rebase
命令将修订版本1-2
移至修订版本3
:
$ hg rebase -s 1 -d 3
结果如下图:
@ changeset: 3:88a90f9bbde7
| branch: my-feature
| tag: tip
| summary: my new feature: edit file a
|
o changeset: 2:38f5adf2cf4b
| branch: my-feature
| summary: my new feature: add file b
|
o changeset: 1:b5939750b911
| branch: my-feature
| summary: start new branch my-feature
|
o changeset: 0:d554afd54164
summary: initial
就是这样,正如对马克的回答的评论中所提到的那样,通常在已经推送的变更集周围走动是一个坏主意,除非您在一个能够沟通和执行历史操作的小团队中工作。
fold
现在内置的histedit扩展程序的命令)。
您可以使用MqExtension。假设要移动的变更集是修订版1-3:
hg qimport -r 1:3 # convert revisions to patches
hg qpop -a # remove all them from history
hg branch new # start a new branch
hg qpush -a # push them all back into history
hg qfin -a # finalize the patches
我更喜欢Mark Tolonen 在此处描述的补丁解决方案
我有的:
hg log -G
#default branch
@ changeset: 3:cb292fcdbde1
|
o changeset: 2:e746dceba503
|
o changeset: 1:2d50c7ab6b8f
|
o changeset: 0:c22be856358b
我想要的是:
@ changeset: 3:0e85ae268e35
| branch: feature/my_feature
|
o changeset: 2:1450cb9ec349
| branch: feature/my_feature
|
o changeset: 1:7b9836f25f28
| branch: feature/my_feature
|
/
|
o changeset: 0:c22be856358b
Mercurials命令:
hg export -o feature.diff 1 2 3
hg update 0
hg branch feature/my_feature
hg import feature.diff
这是我本地存储库的状态
@ changeset: 6:0e85ae268e35
| branch: feature/my_feature
|
o changeset: 5:1450cb9ec349
| branch: feature/my_feature
|
o changeset: 4:7b9836f25f28
| branch: feature/my_feature
|
| o changeset: 3:cb292fcdbde1
| |
| o changeset: 2:e746dceba503
| |
| o changeset: 1:2d50c7ab6b8f
|/
|
o changeset: 0:c22be856358b
现在,我需要从默认分支中删除修订版1 2和3。您可以使用mq扩展名中的strip命令来执行此操作。
hg strip
从存储库中删除变更集及其所有后代。
通过将以下行添加到配置文件(.hgrc或Mercurial.ini)来启用扩展:
vim ~/.hgrc
并添加:
[extensions]
mq =
现在在修订版1上删除此存储库。
hg strip 1
我们在这里
@ changeset: 3:0e85ae268e35
| branch: feature/my_feature
|
o changeset: 2:1450cb9ec349
| branch: feature/my_feature
|
o changeset: 1:7b9836f25f28
| branch: feature/my_feature
|
o changeset: 0:c22be856358b
注意:变更集不同,但修订版相同
对于那些倾向于使用GUI的人
Tortoise Hg
-> File
-> Settings
然后打勾rebase
。重新启动乌龟界面
创建新分支,您将在其中移动更改。单击当前分支名称->选择Open a new named branch
->选择分支名称。
public
(例如draft
),请转到5。(如果更改已经发布并且您不是高级开发人员,则应与高级人员交谈(获得替罪羊),因为这可能会使您忙得不可开交,我不承担任何责任:))。转到View
-> Show Console
(或Ctrl+ L),然后在控制台中编写hg phase -f -d 2
-其中2是最低版本,您将移至新分支。
转到分支和修订版(如果将更改移至步骤3中创建的新分支,则应为最高修订版。)Right Mouse
->Update
转到分支和修订版本,您将从Right Mouse
-> Modify History
-> 移动更改Rebase
单击Rebase
并祈祷没有冲突,如果需要,请合并。
推送更改,此时所有修订仍应为draft
。
转到将更改移动到Right Mouse
-> Change Phase to
->的分支的最高修订版Public
。
希望这可以节省您一些时间。
public
不再自动更改(至少对我而言,它们不更改)。