我如何在Mercurial上重置--hard HEAD?

Hel*_*iro 70 git merge mercurial dvcs

我是一个试图使用Mercurial的Git用户.

这是发生了什么:我做了hg backout一个我想要恢复的变更集.这创造了一个新头,所以hg指示我合并(回到"默认",我假设).合并后,它告诉我,我仍然必须承诺.然后我注意到在解决合并中的冲突时我做错了什么,并且我决定要像以前一样拥有所有内容hg backout,也就是说,我希望这个未经注册的合并消失.在Git上,这个未提及的东西将在索引中,我只是做了一个git reset --hard HEAD擦除它,但从我读过的,Mercurial上不存在索引.那我该怎么退出呢?

Ry4*_*ase 88

如果你还没有提交,听起来你没有,你可以撤消所有的合并工作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
Run Code Online (Sandbox Code Playgroud)

从头开始重新启动合并:"hg resolve file ..."(或所有未解析文件的"-a")

  • 你可以有两个具有相同分支的头,这就是你所拥有的.它们都被命名为"默认".这是mercurial中非常正常的情况,'hg heads`是您用来发现/理解它的命令.当你运行`hg backout`时,它"将已退出的更改作为一个新的变更集提交",这样就创建了一个新的变更集,不会因英勇的努力而消失.所以现在你在名为default的分支上有两个头.在你'合并'(并提交它)之后,你将回到名为default的分支上的一个头. (5认同)

sbl*_*lom 21

这很接近:

hg update --clean

  • 是的...有时虽然当你移动文件(从一个目录到另一个目录)然后决定刮开所有内容时,它与`git reset --hard`不会做同样的事情.Ergo - mercurial是愚蠢的 (5认同)

bin*_*nki 11

Hg Manual的GitConcepts页面解释了如何git在Mercurial中熟悉用户熟悉的许多操作.

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

[extensions]
strip =
Run Code Online (Sandbox Code Playgroud)

注意:此扩展名为Mercurial-2.8中的新增功能.先前版本stripmq扩展中提供了命令.

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

$ hg strip tip
Run Code Online (Sandbox Code Playgroud)

例如,使用revsets语法,我表示我想删除我的任何提交,这导致在我运行时显示额外的头hg heads.如果您在下面的表达式中指定特定修订tip版本,则将修剪当前分支中不是所选修订版本祖先的所有内容.这似乎与我发出命令时所需的行为最接近git reset --hard HEAD.

$ hg strip "branch(tip) and not(ancestors(tip)::tip)"
Run Code Online (Sandbox Code Playgroud)

  • Mercurial 2.8及以上版本有一个``strip``扩展名,以防只显示``hg strip``命令.使用``mq``也可以添加各种其他补丁管理命令. (2认同)

Dar*_*iak 8

从git,命令:

git reset --hard     # reset to last commit    
git clean -df        # delete untracked files
Run Code Online (Sandbox Code Playgroud)

等于

hg update --clean    # reset to last commit  
hg purge             # delete untracked files
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码段可以解决问题,但[包括解释](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有助于提高帖子的质量.请记住,您将来会回答读者的问题,而这些人可能不知道您的代码建议的原因. (8认同)