Mercurial Eclipse插件中的rollback,backout和strip有什么区别?

时间:2011-03-20 20:07:06

标签: eclipse mercurial rollback

Mercurial Eclipse插件中的菜单项rollback,backout和strip之间有什么区别?

我是否可以删除本地存储库中的提交而不使用这3个命令之一修改工作区中的文件?

或者是否有另一种解决方案如何提交并推动修复项目的另一部分?我目前的工作尚未完成,我无法推动它。但我必须快速修复项目的另一部分。

我看到的唯一解决方案是创建第二个工作区。但这看起来对我来说太过分了。

1 个答案:

答案 0 :(得分:58)

这些命令都来自Mercurial本身,并且有很多很好的比较/对比帖子。但是,这里简要介绍一下:

  • rollback:单级撤消。将撤消最后一次拉动或提交(可能是危险的
  • backout:创建一个与给定提交相反的新提交。净效果是撤消,但更改仍在您的历史记录中。
  • strip:从历史记录中删除(销毁)更改。删除变更集也会删除其所有子项,因此它只能用于截断历史记录,而不能删除切片。

这三个都在这里有很好的描述:http://www.selenic.com/mercurial/hg.1.html

对于您的问题2,您可以使用strip删除最近的提交,它不会改变您工作目录的数据。

对于您的问题3,您可以轻松地对该项目的其他部分进行更改:

hg commit -m 'commit your half done work'
hg update OLDERCHANGESET # your working directory now is without the half-done-work
.. do that quickfix ...
hg commit -m 'quickfix'
hg push tip # this pushes the tip revision (latest) and its ancestors, but the half-don't work isn't an ancestor so it doesn't get pushed
hg update HALFDONEWORK # you can find the right revision number using "hg heads"

这称为“匿名分支”,这是一种非常常见的工作方式。你最终会提交半完成的功能,但你可以在以后恢复它,而不必推它。

这对匿名分支有很好的解释:http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/#branching-anonymously