【问题标题】:Hg strip but keep newly tracked / removed files汞条但保留新跟踪/删除的文件
【发布时间】:2015-08-28 06:49:00
【问题描述】:

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

是否有任何命令可以删除变更集、保留更改以及保留添加/删除的文件?

【问题讨论】:

  • 我没有时间给出完整的答案,但 Mercurial Queues 将允许您将变更集转换为补丁,以便将其作为变更集删除,但您仍然可以对文件进行更改,您可以编辑它们等,然后重新应用补丁。
  • 我不明白你为什么要这样使用strip。正如答案中提到的,阶段似乎更合适。但你也可以告诉hg push 只推送特定的修订。

标签: mercurial changeset


【解决方案1】:

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

一般:公开>草稿>秘密。公共变更集是不可变的,草稿是可变的但共享的,秘密的变更集是可变的且不共享的。推送到发布存储库时,草稿可能会在推送时更改为公开(默认)。您可能需要阅读一般阶段的内容并考虑将默认提交阶段设为机密,以便您需要更改要推送的提交的阶段:Phases

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

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

【讨论】:

  • 请注意,--bundle 仅在您安装了进化扩展时才可用;这是没有进化的默认行为。
  • 谢谢,我不知道(不再)。我相应地编辑了我的答案
  • 看来 hg unbundle BUNDLE_FILENAME 也带回了变更集。
【解决方案2】:

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

[extensions]
shelve=

请注意,更好的解决方案是,如另一个响应中所示,首先不要使用hg strip,而是使用阶段来指示您不想推送哪些提交。在这里使用hg strip 有点像用大锤敲开鸡蛋。我仍然添加了我的回复,因为 hg strip 有其他用途,其中有一种方法可以保持当前更改很有用,但另一种方式确实是此用例的“正确”回复。

【讨论】:

  • 请注意,如果您有一些未提交的工作(那么它可能是选择的工具),搁置非常有用,但如果您已经提交了您的工作甚至是一系列提交,则不是。想隐瞒。
  • 是的。它是 strip 的 --keep 选项的替代方案,而不是保密提交。
  • 请注意,TortoiseHG GUI 还内置了搁架功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-11
  • 2018-07-21
  • 2022-01-27
  • 1970-01-01
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多