Mercurial:从远程分支中删除变更集

时间:2009-05-25 15:21:22

标签: version-control mercurial dvcs amend

有没有办法从远程变更集中删除a,或删除整个变更集? 我意外地将.war文件推送到远程仓库,我想将其删除。

4 个答案:

答案 0 :(得分:34)

Mercurial非常努力保护您的数据安全,因此您通常无法更改历史记录。

话虽如此,Mercurial还有许多扩展功能,可以让您轻松更改历史记录。有一个page on the wiki about editing history。该页面也解释了后果。

在您的具体情况下,您必须问自己其他人是否已经取消了您的变更集?如果是这样,那么即使你删除它,它仍然会存在于他们的克隆中,你可能会更好地接受错误。

如果你决定删除它,我建议使用hg clone来获取没有它的副本。这是安全的方式,因为它总是会留下备份。如果您将[z]推送到远程存储库:

[x] --- [y] --- [z]

现在要删除它,然后登录服务器并执行

hg clone -r y repo repo-without-z

然后repo-without-z将包含[y]之前的所有更改 - 也就是说,[z]将被删除:

[x] --- [y]

然后,您可以继续工作并推送新的变更集:

[x] --- [y] --- [w]

如果我已经提取了[z]变更集,现在拉[w]我将在存储库中看到两个头:

            [w]
           /
[x] --- [y] --- [z]

这本身并不危险 - 但人们可能会感到惊讶。如果我从我的克隆中删除[z],我将使用与您相同的存储库。但是,如上所述,如果你有很多用户,这可能是不切实际的。

您还可以使用MQ extension 剥离就地更改集。这样你就不会成为新的克隆。

最后,如果您确定推送是服务器上最后一次操作,则hg rollback可用于删除最后一个事务。但如果您是唯一可以推送到存储库的人,请不要这样做,否则您最终可能会回滚另一个事务。

如果存储库位于Bitbucket,则无法登录服务器。但Bitbucket最近在其网络界面上添加了条带功能。在“管理员”部分中查找“存储库管理”。

答案 1 :(得分:13)

Bitbucket会在剥离时为您提供捆绑(备份),而会计入您的配额。它似乎这样做的原因只是因为我们没有使缓存键无效,指定你使用了多少空间。

这是我们系统中的一个错误,并将予以纠正。在此之前,请放心更改集已被删除,备份是免费的: - )

答案 2 :(得分:4)

我使用hg mqueue扩展来编辑历史记录。它似乎有效。 谢谢大家。

答案 3 :(得分:1)

我有一个类似的情况,我想使用TortoiseHg远程从“Dev”分支中删除合并的分支“A”变更集:

  1. 从分支A的父分支创建分支AA;它的起源。
  2. 将A合并到AA(工作目录)并确保选中:“放弃其他修订的所有更改”。
  3. 将AA合并到Dev分支中(带有提示消息,指示已删除分支A更改)。
  4. 您会看到Dev中不再存在分支A更改。