HG:匹配远程回购的变更集

时间:2011-09-02 18:49:15

标签: git mercurial

我正从Git转到HG并且很难解决HG对我施加的一些限制:

我处于一种我想要吹走的错误提交的情况。事实上,如果我能够匹配远程回购的历史,那将是非常好的。

使用git,这很简单:

git reset --hard origin/branch_name

但是如何使用Mercurial呢?从我所听到的情况来看,如果你不知道自己在做什么,那么移动'tip'会无意中产生匿名分支,这与git处理相同操作的方式非常不同。

4 个答案:

答案 0 :(得分:4)

一个简单的解决方案通常会被忽略,因为它可以简单地将它们克隆掉:

hg clone origin new_clone
rm -rf repo_with_unwanted_commits

现在new_clone让你回到远程回购的小费。如果您的克隆中有其他提交尚未推送但仍然需要,则可以在本地克隆:

hg clone -r tip_you_want repo_with_unwanted_commits new_clone
rm -rf repo_with_unwanted_commits

现在new_clone包含您想要的所有提交内容,但不包括您想要删除的内容。在这种情况下,您只需要在[paths]的hgrc中设置new_clone指向原始原始回购,然后您就会回到原来的位置。

这很简单,不需要扩展,但请注意manojlds建议使用hg strip的速度会更快,并且您可以保留所有可能需要的未跟踪文件。在任何一种情况下,这只会假设您还没有推动想要吹走的变更集。如果您已推送,则唯一安全的选项是hg backout

答案 1 :(得分:2)

“等效”,你想要的是来自MQ扩展的hg strip,你可以用来“吹走”你的提交。

https://www.mercurial-scm.org/wiki/StripExtension

另一个“等同物”是:

hg update --clean
  

使用-C / - clean选项,将丢弃未提交的更改   工作目录更新为请求的变更集。

http://www.selenic.com/mercurial/hg.1.html#update

答案 2 :(得分:1)

Mercurial for Git users有一个命令等价表:

  

git reset --hard == hg revert -a --no-backup

答案 3 :(得分:1)

使用Mercurial 1.8及更高版本,您可以启用标准条带扩展并执行

hg strip "outgoing()"

这将使用revset来选择要删除的修订,即默认远程存储库中尚未出现的额外修订。