有没有办法从远程变更集中删除a,或删除整个变更集?
我意外地将.war
文件推送到远程仓库,我想将其删除。
答案 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”变更集:
您会看到Dev中不再存在分支A更改。