Hg strip但保留新跟踪/删除的文件

时间:2015-08-28 06:49:01

标签: mercurial changeset

在将修改后的代码推送到远程存储库之前,我通常使用hg strip -k删除一些更改集。此命令的问题在于,使用hg add/remove处理的每个文件都不再位于已添加/删除列表

是否有任何删除变更集的命令,会保留更改并保留添加/删除的文件?

2 个答案:

答案 0 :(得分:1)

假设您不想仅推送最新的变更集:那么最佳解决方案是将其阶段从草稿或公共更改为秘密:hg phase --force --secret --revXXX其中XXX是最早的变更集。这样做的好处是,它们永远不会离开您的本地存储库,但只有在您将其阶段更改回草稿或公共状态之后才会被推送。

一般来说:公开>草稿>秘密。公共变更集是不可变的,草稿是可变的但是共享,秘密变量是可变的而不是共享的。当推送到发布存储库时,草稿可能会在推送时更改为公共(默认)。您可能希望一般性地阅读阶段,并考虑将默认提交阶段保密,以便您需要更改要推送的提交的阶段:Phases

但是,如果您需要在提交系列中删除更改集,请按照惯例使用strip。它会将整个提交放入一个包中,以后可以使用hg unbundle BUNDLE_FILENAME将其重新导入存储库。它不会保留存储库中的提交,因此请记住文件名或稍后使用hg incoming BUNDLE_FILENAME检查包文件名内容。 (注意:如果你使用evolve扩展,你需要带条带的--bundle参数)

如果您对此感到不舒服而非想要“普通”补丁文件,请在剥离您不想共享的变更集之前使用hg export XXX > file_XXX.patch(XXX为修订版)。

答案 1 :(得分:0)

直接答案是使用hg shelve暂时搁置您的更改,然后使用hg unshelve恢复更改。您可能必须先通过.hgrc中的条目启用内置搁架扩展程序,例如:

[extensions]
shelve=

请注意,更好的解决方案是,如其他响应中所示,首先不使用hg strip,而是使用阶段来指示您不想推送的提交。在这里使用hg strip有点像用大锤打开鸡蛋。我仍然添加了我的回复,因为hg strip还有其他用途,其中有一种方法可以保留当前的更改是有用的,但另一种用途实际上是"对"对此用例的回应。