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

Hor*_*ux7 49 eclipse mercurial rollback

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

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

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

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

Ry4*_*ase 62

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

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

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

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

对于您的问题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"
Run Code Online (Sandbox Code Playgroud)

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

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

  • 让人惊讶.我希望它能给出很好的警告.`/我提醒自己为什么他保持他的VCS和他的IDE _separate_` (3认同)
  • 为了记录它没有好的警告,我试图找出如何撤消它时发现了这个问题.哎呀! (2认同)
  • 在Mercurial 2.2及更高版本中使用`hg commit --amend`来修改(重做)最后一次提交. (2认同)