HG:匹配远程回购的变更

问题描述:

我从SVN移动到HG和有困难时期的一些限制HG是对我施加:HG:匹配远程回购的变更

我在一个情况下,我有一些错误提交,我想要吹走。事实上,如果我能匹配远程回购的历史,那将是非常好的。

使用Git,这是易如反掌:

git reset --hard origin/branch_name 

但我怎么能有水银做呢?从我听说的情况来看,如果你不知道自己在做什么,移动'小费'可能会无意中产生匿名分支,这与git处理相同操作的方式截然不同。

+0

为什么切换到第一位? ;) – knittl

+0

这不是我的选择:( – Ben

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

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

另一种 “等价物” 是:

hg update --clean 

随着-C/- 清洁选项,提交变更都丢弃, 工作目录更新到所请求的变更。

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

+0

您的链接页面还提到»如果变更集不是工作目录的父级,更新被中止« – knittl

+0

@knittl - 在设计上,你不会有一个明确的等价物,我还加了'hg strip',这将有助于他的案例 – manojlds

+0

'hg strip' +1 – knittl

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

的git的复位 - 硬==汞还原-a --no备份

+0

我看到的链接,但最好的等效,在我看来,在我的答案。 – manojlds

+0

+1。我看到'hg revert -a'确实是一个很好的等效。尽管我认为'hg strip'可以帮助他更多的在他的情况下。 – manojlds

+1

据我所知,这只会摧毁本地,*未提交*的变化。 – Ben

一个简单的解决方案,它常常被忽视的吹走不需要提交是简单地复制他们去

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包含了一切你想要的提交,但不包括那些你想要的垃圾。在这种情况下,您只需在new_clone的hgrc中设置[paths]以指向原始的原点回购,然后回到开始的位置。

这很简单,不需要扩展,但是请注意,manojlds使用hg strip的建议会更快,并且您可以保留任何可能需要的未跟踪文件。无论在哪种情况下,只有在您尚未推送要删除的变更集时才能使用。如果你已经推动,你唯一的安全选择是hg backout

与Mercurial 1。8,以后你可以启用标准带扩展并做

hg strip "outgoing()" 

这将使用revset选择修改剥离,即额外的修订尚未出现在默认的远程仓库。

+0

+1,+1000,如果我可以......这应该是标记的答案!其他答案指向扩展名,但不显示如何很好地选择未推送的更改集。 – Assimilater