我是一个试图使用Mercurial的Git用户。
以下是发生的事情:我对我想要恢复的变更集做了hg backout
。这创造了一个新头,所以hg指示我合并(回到“默认”,我假设)。合并后,它告诉我,我仍然必须承诺。然后我注意到在解决合并中的冲突时我做错了一些事情,并且我决定在hg backout
之前拥有所有内容,也就是说,我希望这个未经修改的合并消失。在Git上,这个未提及的东西将在索引中,我只是做一个git reset --hard HEAD
来消除它,但是,从我读过的,Mercurial上不存在索引。那我该怎么退出呢?
答案 0 :(得分:87)
如果您尚未提交,并且听起来没有,则可以撤消与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”表示所有 未解决的文件)
答案 1 :(得分:21)
这很接近:
hg update --clean
答案 2 :(得分:11)
Hg手册的GitConcepts页面介绍了如何在Mercurial中使用git
个用户熟悉的操作。
Mercurial没有任何内置的git reset --hard
行为。但是,strip
扩展名提供了strip
命令。要在~/.hgrc
文件中使用first enable strip
::
[extensions]
strip =
注意:此扩展程序在Mercurial 2.8中以新的形式发布。先前版本在mq
extension中提供了strip
命令。
现在您可以运行hg strip
甚至hg help strip
等命令。要删除变更集及其所有子项,只需将变更集指定为hg strip
的参数即可。例如,要删除刚刚进行的上一次提交(在使用导致hg rollback
报告不再有要回滚的事务的命令之后),可以删除tip
修订版。每次运行此命令时,都将删除另一个修订。 hg strip
的行为应被视为不可逆转;不熟悉的用户在使用之前应该备份他们的存储库。
$ hg strip tip
例如,对于revsets syntax,我表示我想删除我的任何提交,这会导致在运行hg heads
时显示额外的头部。如果在tip
以外的表达式中指定特定修订,则将修剪当前分支中不是所选修订版本祖先的所有内容。当我发出命令git reset --hard HEAD
时,这似乎最接近我想要的行为。
$ hg strip "branch(tip) and not(ancestors(tip)::tip)"
答案 3 :(得分:8)
从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