我有以下情况:
问题是:我怎样才能将修订版9从B的回购转移到A的回购中,而不是移动修订版6-8?
我认为DVCS的优点之一就是我可以轻松地做到这一点(在“集中式”VCS世界中,我可以通过分支和合并轻松修复,我已经使用Vault做了很多而且它是很容易)。
我在这里错过了什么吗?
注意:我查看了“MQ”,但这似乎是一大堆蠕虫,看起来它只会影响正常的提交周期。这是对的吗?
任何帮助或指示将不胜感激。谢谢!
丹尼尔
答案 0 :(得分:11)
https://www.mercurial-scm.org/wiki/wiki/TransplantExtension
参见“使用移植来樱桃挑选一组变更集”:
移植可以管理多个变更集或变更集范围 这样:
hg transplant REV1:REV2 REV3
这个例子可以解释指定的变更集范围 REV1:REV2和工作目录上的附加变更集REV3 修改
理想情况下,您可以使用分支机构执行此操作吗?
答案 1 :(得分:11)
我以这种方式思考命令:
hg bundle
为您提供变更集的二进制版本,hg unbundle
会将捆绑包转换为接收方的完全相同的变更集。
Bundle和unbundle用于传输变更集,比如电子邮件,二进制补丁取决于要存在的父变更集。
hg export
为您提供变更集的文本表示,除非您使用--exact
命令行标记hg import
,否则应用此修补程序不会创建完全相同的变更集在接收方。
不使用--exact
的好处正是您可以在任何地方应用此类补丁,只要没有文字冲突。
hg transplant
只是hg export
和hg import
的精简包装。
答案 2 :(得分:1)
如果您想在mercurial仓库中“折叠”或跳过历史记录,只需更新到基本修订版(在要折叠的部分之前)。如果你想将上面的所有内容折叠成一个变更集(这看起来像你想要的那样),你只需恢复到该分支的头部并提交它(或只提交你想要的文件) 。这将创建一个包含你想要的东西的新变更集,这样你就可以将它推送到你的网站A.你不想要的东西,你只是忽略(或者如果你不能忽略它就剥掉它)。
如果您希望保留多个更改集,则应 rebase 。启用rebase扩展并将#9重新绑定到#5。如果有#9的孩子,这些将会随之移动。 Rebase比移植更好(它做类似的事情)因为rebase使用3向合并机制来迁移变更集,使其更有可能成功。移植或多或少只是一种愚蠢的出口导入,因此它忽略了共同的历史。