我怎么git重置 – 硬头上Mercurial?

我是一个尝试使用Mercurial的Git用户。

这是发生了什么:我做了一个恢复我想要恢复的变更集。 这创造了一个新的头,所以汞指示我合并(回到“默认”,我假设)。 合并后,它告诉我,我仍然不得不承诺。 然后我注意到在解决合并冲突时我做错了什么,并决定我希望拥有和hg backout之前一样的东西,也就是说,我希望这个无限的合并消失。 在Git上,这个无用的东西将在索引中,我只是做一个git reset --hard HEAD清除,但从我读过的,索引不存在于Mercurial。 那么我怎么退出呢?

如果你还没有提交,而且听起来好像没有,你可以使用hg update --clean取消所有的合并工作。

但是,在新的mercurial中有一个方便的命令来重新合并单个文件: hg resolve path/to/file.ext 。 从hg help resolve

 The available actions are: ... 4) discard your current attempt(s) at resolving conflicts and 

从头开始重新合并:“hg resolve file …”(或“-a”表示所有未解决的文件)

这是closures的:

hg update --clean

从git中,命令:

 git reset --hard # reset to last commit git clean -df # delete untracked files 

等于

 hg update --clean # reset to last commit hg purge # delete untracked files 

Hg手册的GitConcepts页面解释了如何执行git用户在Mercurial中熟悉的许多操作。

Mercurial没有任何内置的git reset --hard行为。 但是, strip扩展提供了一个strip命令。 要使用, 首先在~/.hgrc文件中启用strip

 [extensions] strip = 

注意:这个扩展在Mercurial-2.8中是新的。 以前的版本提供了mq扩展中的strip命令。

现在你可以运行像hg strip甚至hg help strip这样的命令。 要删除变更集及其所有子项,只需将该变更集指定为hg strip的参数即可。 例如,要删除刚刚创build的最后一个提交(在使用导致hg rollback命令报告不再有任何要回滚的事务之后),可以删除最新的修订。 每次运行此命令时,都会删除另一个修订版本。 hg strip的行为应该被认为是不可逆转的; 不熟悉的用户在使用之前应该备份他们的存储库。

 $ hg strip tip 

例如,使用revsets语法 ,我指出我想删除我的任何提交,导致在运行hg heads时显示额外的hg heads 。 如果你在下面的expression式中指定了一个特殊的修改,那么当前分支中不是你所选修订版本的祖先的所有内容都将被修剪。 这似乎最接近我想要的行为,当我发出命令git reset --hard HEAD

 $ hg strip "branch(tip) and not(ancestors(tip)::tip)"