我对本地存储库提交了一些更改,但尚未推送。由于某个功能的使用时间比预期的要长,因此我希望在推送之前将这些更改交换到命名的分支上。我怎样才能做到这一点?Mercurial将更改移至新分支
回答
至于建议的关口,MqExtension是你的问题的解决方案。恕我直言,一个更简单的工作流程是使用rebase extension。假设你有一个历史是这样的:
@ 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
就是这样..正如马克的回答中所提到的那样,移动已经推动的变更集通常是一个坏主意,除非你在一个小团队中工作,你可以沟通和执行你的历史操纵。
恕我直言,这种解决方案的缺点是它引入了“启动新分支我的功能”哑提交(即不会更改任何文件)。 – sschuberth
@sschuberth:我认为在这里明确表达是件好事。如果额外的变更集对您来说是一个问题,请将其与后面的变更集结合使用(例如,通过使用现在内置的[histedit](http://mercurial.selenic.com/wiki/HisteditExtension)扩展名的'fold'命令)。 –
如何用ASCII树打印日志? –
您可以使用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描述here
我有什么:
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
汞命令:
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
。
重启龟UI
创建新的分支,你将被移动的变化。点击当前分行名称 - >选择
Open a new named branch
- >选择分行名称。- 如果没有做出要移动变化
public
(如draft
)到5(如果改变已经公布和你不是高级开发人员,你应该与某个高级人员谈话(请准备替罪羊),因为你可能会把事情搞得一团糟,我不承担任何责任:))。
转到View
- >Show Console
(或按Ctrl +大号) 然后在控制台hg phase -f -d 2
写 - 其中2最低版本,你会被转移到新的分支。
太棒了!去试试这个,但只有一个问题 - 为什么在最后阶段将公共阶段改为公开? “在远程存储库中看到的任何变更集都是公开的”,所以当你推动它时,它不会被设置为公共吗? –
@JoshLeeDucks推动时,他们不会再自动改变为“公共”(至少对我而言他们不会)。 –
- 1. git将本地提交的更改移至新分支并按
- 2. 分支模型:如何将分支完成的更改移至另一分支
- 3. 将分支移至新标签
- 4. Mercurial,更改集的更改分支
- 5. 将工作移至另一个分支Mercurial
- 6. 从分支中的mercurial分支库中提取最新更改
- 7. GIT中移动从主未提交更改至新分支
- 8. 将开发变更移至新功能分支
- 9. git:如何在合并分支之前将更改移至新文件?
- 10. Mercurial总是说更改分支时更新了文件
- 11. Mercurial/Tortoiehg合并分支没有更新
- 12. 将本地更改移入分支
- 13. 如何将已提交但未修改的更改移至另一个分支?
- 14. Git - 将分支移至主人
- 15. 如何将某些变更集移动到mercurial中的新分支
- 16. 我如何更新与其他分支的mercurial分支
- 17. 如何使用Mercurial将上游更改引入分支?
- 18. 如何仅将您的更改推送到许多mercurial分支?
- 19. Mercurial:将单个更改合并到未命名的分支中
- 20. 事后如何将我的更改移动到新分支?
- 21. 使用VS2010将TFVC挂起的更改转移到新分支?
- 22. 如何将分支更新为Mercurial中不同分支上的标签状态?
- 23. Mercurial - 将两个分支合并为第三个新分支
- 24. mercurial将一个分支设置为新的默认分支
- 25. 我可以将更改多个mercurial subrepos提交给新的命名分支吗?
- 26. TFS将分支移至新创建的文件夹
- 27. 将更新推送到修剪的Mercurial分支
- 28. 将主变更移至开发分支(使用GIT)
- 29. 在Mercurial中移动分支开始
- 30. 仅将某些更改列表移至新的SVN服务器
可能的重复[如何将某些变更集移动到新的分支在mercurial](http://stackoverflow.com/questions/2219756/how-to-move-some-changeset-to-a-new-branch- in-mercurial) –