Mercurial仅提交提示

Mercurial仅提交提示,mercurial,dvcs,mercurial-commit,Mercurial,Dvcs,Mercurial Commit,在我的设置中,我有一个中央Hg回购协议,我正在推动我的本地更改。假设在我的本地克隆中,我有一系列本地提交,然后我想将更改推送到中央repo。我怎样才能只推进最终状态而不包括我所做的所有“小”本地提交 我之所以这样做,是因为有时候我不想因为我在当地做出的所有小承诺而玷污中央回购的历史。你为什么要这样做?提交小的更改可以很容易地恢复某些内容。如果您在一次大提交中收集了所有内容,那么恢复一个小更改可能就不那么容易了。可以使用mq扩展重写您的历史记录。假设要折叠的修订是rev,5,6,7,其中7是提示。

在我的设置中,我有一个中央Hg回购协议,我正在推动我的本地更改。假设在我的本地克隆中,我有一系列本地提交,然后我想将更改推送到中央repo。我怎样才能只推进最终状态而不包括我所做的所有“小”本地提交


我之所以这样做,是因为有时候我不想因为我在当地做出的所有小承诺而玷污中央回购的历史。

你为什么要这样做?提交小的更改可以很容易地恢复某些内容。如果您在一次大提交中收集了所有内容,那么恢复一个小更改可能就不那么容易了。

可以使用mq扩展重写您的历史记录。假设要折叠的修订是rev,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
#导入要折叠到mq中的rev
#mq将从5:tip为每个修订版创建名为
#.diff
hg qimport-r5:尖端
#转到第一个提交
hg qgoto 5.diff
#把另一个折叠起来。除了贝壳魔法,还有
#没有命令行方法一次指定多个修补程序。
hg qfold 6.diff
hg qfold 7.diff
#将新mq修补程序作为其自己的变更集提交
hg qfinish 5.diff

现在,您的存储库只包含一个版本5,其中包含以前版本5、6和7的内容。

我同意比约恩的观点(我对他的答案投了赞成票),您所做的不是一个好主意——有意义的历史是一件好事。如果你无法摆脱它,那么你尝试做的不仅仅是推送最后一个变更集,而是一个新的变更集,它是所有这些变更集的组合。最简单的方法是使用折叠扩展,尽管mq甚至导出/导入都可以做到这一点。关键在于,在将多个变更集合并为一个变更集时,您正在重写历史,您将删除现有变更集,并将其替换为新的组合变更集。这样做违反了使Mercurial如此值得信任的历史的不变性。

Mercurial wiki页面解释了如何在没有任何扩展的情况下做到这一点


该页面还链接了一些使用hg扩展的替代方法,如。

Mercurial鼓励您尝试避免的内容。让工具完成它的工作。