我不小心把一个分支推到了一个回购。无论如何我可以改变回购(并删除分支)?关闭它不是一个解决方案。
答案 0 :(得分:1)
当我们不得不从服务器仓库中移除一个分支时,我们遇到了类似的问题。退出不是一种选择,因为有问题的分支已被所有人拉动。
我们从服务器仓库中剥离了(hg strip
来自MQ扩展)的分支。从现在开始,如果开发人员试图推送,他会发出一条消息“推送创建新的远程分支”,即使他们实际上没有创建任何。我们使用strip
命令创建了一个批处理文件,并将其分配给开发人员,并解释说“新的远程分支”是运行批处理文件的信号。
这种方法需要花费一些时间和精力才能让每个人摆脱分支,但它确实有效。
答案 1 :(得分:1)
你有几个选择,其中没有一个是容易的,并且没有一个会让你留下一个“p,,被钟声保存”的感觉。
解决此问题的唯一真正的方法是首先尝试避免它。
话虽如此,让我们在这里探讨各种选择:
根除变更集的第一个选择很难。由于您将更改集推送到中央存储库,因此您需要直接访问该服务器上的存储库。
如果这是一个您无法直接访问存储库的服务器,只能通过Web界面,或通过推/拉/克隆,那么您的选择是希望Web界面具有根除这些更改集的方法,否则转到选项2。
为了摆脱变更集,您可以使用更改集创建存储库的新克隆,并指定仅停止引入您想要删除的变更集的选项,或者您可以使用MQ
扩展名并删除有问题的变更集。
要么是好的,但我个人喜欢克隆选项。
但是,此选项取决于使用中央存储库的任何和所有开发人员:
例如,您可以指示所有开发人员杀死他们的本地克隆,并在您删除中央存储库中的更改集后重新放弃一个新副本。
这是重要的部分:
如果您无法让所有开发人员为此提供帮助,您应放弃这一思路,转而使用选项2
为什么呢?因为现在你有两个问题:
简而言之,这将为您提供大量额外的工作。我不会这样做,除非违规的变更集是超级批判的摆脱。
另一方面,选项2有自己的问题,但更容易实现。
基本上,您使用hg backout
命令引入一个新的变更集,该变更集可以撤销违规变更集所做的修改,并提交并推送它。
这里的问题是,如果在某些时候你真的想要引入这些变更集,你将不得不与Mercurial进行一些斗争才能使合并正确。
但是,您的开发人员将不再有工作。下次他们拉,他们也会得到你的校正变更集。
让我用不同的词重述这个选项:
不要删除变更集,而是保留它们,但引入另一个可以反转变更的变更集。
两种选择都不好,两者都会产生一些额外的工作。
答案 2 :(得分:0)
如果上面Jason的评论中描述的'退出'选项不适合你,你可以使用hg convert
重新制作回购,直至你的误推,这(尽管它的名字)也有效与hg。
例如hg convert -r before-mistaken-push /path/to/original /path/to/new
您可能必须使用usebranchnames和clonebranches设置。