Mercurial Eclipse 插件中的回滚、回退和剥离有啥区别?
Posted
技术标签:
【中文标题】Mercurial Eclipse 插件中的回滚、回退和剥离有啥区别?【英文标题】:What is the difference between rollback, backout and strip in the Mercurial Eclipse plugin?Mercurial Eclipse 插件中的回滚、回退和剥离有什么区别? 【发布时间】:2011-07-19 06:35:19 【问题描述】:Mercurial Eclipse 插件中的菜单项回滚、回退和剥离有什么区别?
我可以使用这 3 个命令之一删除本地存储库中的提交而不修改工作区中的文件吗?
或者是否有其他解决方案可以让我在项目的另一部分提交和推送修复?我目前的工作还没有完成,我不能推动它。但我必须检查项目另一部分的快速修复。
我看到的唯一解决方案是创建第二个工作区。但这对我来说似乎有点矫枉过正。
【问题讨论】:
您应该将问题限制为每个问题一个问题。你的第一个和你的第二个/第三个并不真正相关。 【参考方案1】:这些命令都来自 Mercurial 本身,并且有很多很好的比较/对比帖子。但是,这里是简短的:
rollback
:一级撤消。将撤消最后一次拉取或提交(可能很危险)
backout
:创建一个与给定提交相反的新提交。最终效果是撤消,但更改仍保留在您的历史记录中。
strip
:从历史记录中删除(destroy)更改。删除变更集也会删除其所有子项,因此它只能用于截断历史记录,不能删除切片。
这三个都很好地描述在这里: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
【讨论】:
问题2的答案是错误的。 Eclipse 中的 strip 也从工作区中删除变更集。 哎呀。我希望它对此给出很好的警告。/me reminds himself why he keeps his VCS and his IDE _separate_
作为记录,它不好给出警告,我在试图找出如何撤消它时发现了这个问题。糟糕!
在 Mercurial 2.2 及更高版本中使用 hg commit --amend
来修改(重做)最后一次提交。以上是关于Mercurial Eclipse 插件中的回滚、回退和剥离有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
如何在mercurial eclipse插件的历史视图中过滤分支?