在我的设置中,我有一个中央Hg仓库,我正在推动我的本地更改。在我的本地克隆中说我有一系列本地提交然后我想将更改推送到中央存储库。如何在不包含我所做的所有“小”本地提交的情况下仅推送最终状态?
我想要这个,因为有时候我不想用我所做的所有小型本地提交来污染中央回购的历史。
答案 0 :(得分:6)
你为什么要那样做?进行小的更改可以轻松恢复某些内容。如果你在一次大提交中收集所有内容,那么恢复一个小小的改变可能就不那么容易了。
答案 1 :(得分:2)
我同意bjorn(我赞同他的回答),你所做的并不是一个好主意 - 有意义的历史是一件好事。如果你不能谈论它,那么你要做的不仅仅是推送最后一个变更集,而是一个新的变更集,它是所有这些变更集的组合。最简单的方法是使用折叠扩展,尽管mq甚至导出/导入都可以。关键在于将多个变更集合并为一个您正在重写的历史记录,并且您将删除现有的变更集并将其替换为新的组合变更集。这样做违反了历史的不变性,使Mercurial如此值得信任。
答案 2 :(得分:1)
如何在没有任何扩展的情况下执行此操作将在mercurial wiki页面ConcatenatingChangesets中进行说明。
该页面还链接到一些带有hg扩展名的替代方法,例如CollapseExtension。
答案 3 :(得分:0)
可以使用mq扩展名重写历史记录。假设你想要崩溃的修订是转速,5,6,7,其中7是小费。您可以通过以下方式完成此任务:
# Import the revs you want to collapse into mq
# mq will create patches for each revision from 5:tip, with the name
# <local rev number>.diff
hg qimport -r5:tip
# Goto the first commit
hg qgoto 5.diff
# Fold in the other commits successively. Aside from shell magic, there is
# no command line way to specify multiple patches at once.
hg qfold 6.diff
hg qfold 7.diff
# Commit the new mq patch as a changeset of its own
hg qfinish 5.diff
现在,您的存储库仅包含一个rev 5,其中包含之前版本5,6和7的内容。