我是Mercurial的新手,我仍在尝试建立工作流程。
我克隆了一个远程存储库。然后我进行更改并提交到我的本地存储库。我想推出一个干净的修订历史。我不想推动一些可能只会混淆远程存储库的修订(例如,方法的错误重命名,添加javadoc,删除空格等)。这可能吗?
谢谢!
答案 0 :(得分:8)
确实有些情况下修剪/剥离/修改变更集或分离私有/进行中和公共/准备好的更改是有意义的。以下是如何使用Mercurial处理此问题的一些建议:
如果您进行了一系列小型提交(这是一件好事),但您更愿意将它们作为一个变更集发布(如果您承诺 - 可能与之相反 - 快照更改集有意义),请使用 collapse 扩展名:
$ hg collapse -r <first-ref>:<last-ref> # both revs including
如果您想要保密,而您想要发布其他人,则(a)使用 mercurial queues 进行私密更改或(b)将您提交给私有更改自己的分支(named, bookmarked, or cloned)并定期将其与公共分支合并。如果你交替进行私人和公共更改,后者要求你经常在分支之间切换。
<强>更新强>
为了说明选项2.b,请考虑这个变更集图表:
0--1--4--5---8--9 <= public/stable branch
\ \
2--3--6--7 <= private/dev branch
这意味着您已在 dev 分支上进行了更改2
和3
。然后,您在 stable 分支上做了一些工作(修订版4
和5
)。这些更改在 dev 中也有意义,因此您将它们合并到 dev (修订版6
)中。最后,您在 dev (修订版7
)中进行了另一项实验性更改,并在 stable (修订版8
和{{ 1}})。您现在可以通过运行
9
所有私人更改都将保留在本地!
请注意,如果您计划稍后修改私有提交(例如将它们折叠为一个更改集),则不得在稳定分支中合并(折叠无法跨合并)。相反,rebase只要您希望它们与 stable 中的最新更改同步,您就会进行私密更改。
答案 1 :(得分:2)
这是一个关于修订控制系统的问题,而不是关于修订控制系统的问题。就个人而言,我会推动一切,你所建议的有点违背版本系统的目的。
但是,如果您想了解有关hg工作流程的更多信息,请尝试查看此guide或此wiki。
您可能还对rollback命令感兴趣,该命令可以修复最新的提交。
编辑:我要选择的选项是保留两个分支:一个与远程存储库相同,您只提交“官方”更改,另一个用于合并新的官方提交并进行额外添加私人提交。
答案 2 :(得分:1)
如果最后发生了所有寄生变化,你可以简单地剥离它们。
如果没有,您可以尝试使用Patch Queue删除不必要的提交:
这适用于小型提交。如果您尝试这样做,请在本地仓库的克隆上进行,以避免丢失。
另外,请注意不要改变已经“共享”(推送)的历史记录。
答案 3 :(得分:0)
Histedit也可用于编辑历史记录