hg strip与hg backout和hg revert的区别

85
这三个命令都可以用来撤销之前的变更,它们之间有什么区别呢?
  • hg strip:从仓库中永久删除一个或多个变更集。
  • hg backout:创建一个新的变更集,以撤销指定变更集所做的更改。
  • hg revert:放弃工作目录中文件的未提交更改。

请参见https://dev59.com/M2Yr5IYBdhLWcg3wVYwg。 - PhoneixS
2个回答

111

hg strip 命令可以从代码库中移除某一次变更及其所有子孙变更,就像这些变更从未存在过一样。使用该命令时需要小心,因为对于 public 类型的变更,它并不能在其他代码库中移除该变更,当你下次拉取代码时将会重新获取该变更。

hg backout 命令可以创建一个新的变更来撤销之前的某一个特定变更。原始变更记录仍保留在代码库中,但是也会有一个新的变更记录来移除变更效果。

hg revert 命令可以通过指定一个版本号来更新当前工作空间到某一个指定的版本,如果接下来你提交该工作空间,那么它会撤销此后所有的变更。

以下是关于 revert 和 backout 的更多详细信息:


1
嗨,在我做回滚时,hg backout命令会还原因错误合并而发生的文件添加/删除吗? 顺便说一下,我已经尝试过并发现新文件仍然保留在代码库中。 - rain
处理未推送的变更集时,我无法看到“hg strip --keep tip”和“hg backout”之间的区别(在Mercurial 4.5.2中尝试过)--两者都会删除最近的变更集/提交并保留其他变更。 - Tom

0

在某个时刻,我需要构建Jenkins流水线,其中每次作业启动时都应该还原POM文件。我面临的问题是:如何反转所有POM文件。

由于这个答案是谷歌上最早的之一,我想为有同样问题的人贡献我的解决方案。

hg revert */pom.xml

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接