我正从Git转到HG并且很难解决HG对我施加的一些限制:
我处于一种我想要吹走的错误提交的情况。事实上,如果我能够匹配远程回购的历史,那将是非常好的。
使用git,这很简单:
git reset --hard origin/branch_name
但是如何使用Mercurial呢?从我所听到的情况来看,如果你不知道自己在做什么,那么移动'tip'会无意中产生匿名分支,这与git处理相同操作的方式非常不同。
答案 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选项,将丢弃未提交的更改 工作目录更新为请求的变更集。
答案 2 :(得分:1)
Mercurial for Git users有一个命令等价表:
git reset --hard == hg revert -a --no-backup
答案 3 :(得分:1)