在将修改后的代码推送到远程存储库之前,我通常使用hg strip -k
删除一些更改集。此命令的问题在于,使用hg add/remove
处理的每个文件都不再位于已添加/删除列表
是否有任何删除变更集的命令,会保留更改并保留添加/删除的文件?
答案 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
还有其他用途,其中有一种方法可以保留当前的更改是有用的,但另一种用途实际上是"对"对此用例的回应。