如何剥离和重建现有分支并将其推送到主存储库? (又称用新的分支替换分支)

时间:2013-06-25 01:26:57

标签: mercurial branch push dvcs

背景:

有三个分支:“我的”和“你的”和“主要的”。我从一个干净的克隆开始,唯一的要求是使“我的”分支像“主”分支一样只有少量添加的更改。我不想改变其他分支。当前的“我的”分支只有一个变更集,我更愿意删除并替换为新的变更集。

MY ATTEMPT:

“我的”只包含一个变更集,我想丢弃它。所以,我剥离了这个变更集(实际上删除了“我的”),更新了目录到“主”分支,重新创建了“我的”(“hg branch mine”),添加了我的更改,已提交,现在我想推送。 “hg push -b mine”的输出是“abort:push创建新的远程头...”并引用我的新变更集。但是,我只想用旧的(本地删除的)变更集替换我的新变更集。 “hg outgoing”列出了我的新变更集,“hg incoming”列出了我的旧变更集。

我觉得我很亲密,有什么建议吗?强迫推动会在这里工作吗?欢迎提供替代解决方案和有用的参考资料。

1 个答案:

答案 0 :(得分:0)

在我尝试之后,其中涉及从“我的”分支中删除我不想要的变更集,然后在“我的”分支上提交我的新变更集,这是我的解决方案:

我通过强制推送“hg push -f”解决了这个问题,因此在“我的”分支(在主存储库中)创建了两个磁头,然后使用“hg strip”扩展来剥离额外的磁头。这是在我推动后从主存储库完成的,这可能不完美,但它可以用于这些目的。

需要强制推送来添加我的新变更集(新的“我的”分支)和条带(必须在推送之后,在主存储库上)删除旧的“我的”分支。事实证明,剥离我本地存储库中的“mine”分支并没有什么不同,因为剥离的变更集仍然存在于主存储库中(因此需要在推送后剥离它们)。

如果有更好的解决方案(或更好的方式来表达问题),我很想知道。