我怎么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)"