Mercurial帮助文本说,“strip命令会删除指定的变更集及其所有后代。”这听起来非常像重写历史记录,如果有人将他的工作建立在一个突然被删除的变更集之上,那么它必然会引起问题。但是帮助文本还说该命令“不是历史重写操作,可以在公共阶段用于变更集”。我确信编写帮助文本的人非常清楚自己在做什么,所以我错过了什么才能理解这一点?
答案 0 :(得分:7)
关键是,如果您删除公共变更集,然后从某个地方再次撤消它,则不会导致任何问题。你只需要恢复原来的变更集。
如果您(例如)将两个公共变更集合在一起,然后从某个地方提取原始变量集,那么您现在有两个分支。一个具有原始的两个变更集,另一个具有折叠的变更集,但两者都具有相同的变化。在那一刻,地狱破裂了,孩子们吃着怪物在地球上漫游。
因此,“历史重写”与“历史剥离”不同。
davidmc24由Matt Mackall(Mercurial的父亲)指出this post,他说的基本上是相同的东西
答案 1 :(得分:1)
我不能肯定地说出来,但我的猜测是它“已经过时了”。 hg strip
作为mq
的一部分开始,在阶段添加至少三年之前。
可能更好的措辞是:
不被视为历史重写操作,可用于公共阶段的变更集
当添加阶段时,会采取大量措施来打破任何人的现有工作流程。提交从草案阶段开始,一旦推送就变为 public 。任何阶段感知命令都知道在推送提交阶段后 public 并且不允许修改(除非推送到非发布存储库......)。
但是,有人已经手动使用strip
并在脚本中删除已推送的更改集,如果升级后strip
突然说“嘿,你不能剥离它上市!”然后那些人就会破坏他们的向后兼容承诺。
阶段正逐渐发展成一个非常惊人的evolve系统,对于几乎所有情况来说,这将是一个比mq更好的选择,但我仍然怀疑我们是否会让马特去除mq和剥离 - 他仍然坚持维护Python 2.4兼容的代码库,并且已经有9年了!
Tl; Dr:尽管strip
始终是一个禁用的扩展,但是有太多人使用它来改变它的行为随着阶段的出现而发生。