Cas*_*ash 123 mercurial branch
我对本地存储库进行了许多更改,但尚未推送.由于功能上的时间比预期的要长,我想在推送之前将这些更改交换到命名分支.我怎样才能做到这一点?
Obe*_*nne 152
正如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
Run Code Online (Sandbox Code Playgroud)
这意味着,修订0是您开始处理功能的基础.现在,您想要对1-2命名分支进行修订,比如说my-feature.更新到修订0并创建该分支:
$ hg up 0
$ hg branch my-feature
$ hg ci -m "start new branch my-feature"
Run Code Online (Sandbox Code Playgroud)
历史现在看起来像这样:
@ 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
Run Code Online (Sandbox Code Playgroud)
使用该rebase命令将修订移动1-2到修订版3:
$ hg rebase -s 1 -d 3
Run Code Online (Sandbox Code Playgroud)
这导致以下图表:
@ 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
Run Code Online (Sandbox Code Playgroud)
就是这样......正如Mark对答案的评论所提到的那样,移动已经推动变更集通常是一个坏主意,除非你在一个小团队中工作,你可以在那里沟通和执行你的历史操作.
Mar*_*nen 30
您可以使用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
Run Code Online (Sandbox Code Playgroud)
我更喜欢Mark Tolonen 在这里描述的补丁解决方案
是)我有的:
hg log -G
#default branch
@ changeset: 3:cb292fcdbde1
|
o changeset: 2:e746dceba503
|
o changeset: 1:2d50c7ab6b8f
|
o changeset: 0:c22be856358b
Run Code Online (Sandbox Code Playgroud)
我想要的是:
@ 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
Run Code Online (Sandbox Code Playgroud)
mercurials命令:
hg export -o feature.diff 1 2 3
hg update 0
hg branch feature/my_feature
hg import feature.diff
Run Code Online (Sandbox Code Playgroud)
这是我本地存储库的状态
@ 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
Run Code Online (Sandbox Code Playgroud)
现在我需要从默认分支中删除修订版1 2和3.您可以使用mq扩展名中的strip命令执行此操作.
hg strip从存储库中删除变更集及其所有后代.
通过在配置文件(.hgrc或Mercurial.ini)中添加以下行来启用扩展:
vim ~/.hgrc 并添加:
[extensions]
mq =
Run Code Online (Sandbox Code Playgroud)
现在在修订版1上删除此存储库.
hg strip 1
Run Code Online (Sandbox Code Playgroud)
我们在这里
@ 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
Run Code Online (Sandbox Code Playgroud)
注意:变更集不同但修订版本相同
对于那些倾向于使用GUI的人
Tortoise Hg- > File- > Settings然后打勾rebase.重启tortoise UI
创建新分支,您将在其中移动更改.单击当前分支名称 - >选择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.
希望这能为您节省一些时间.
| 归档时间: |
|
| 查看次数: |
33321 次 |
| 最近记录: |