撤消Mercurial推送

Fai*_*yet 13 mercurial tortoisehg

我正在使用TortoiseHg进行版本控制.我在提交到本地后推送到远程存储库.如何撤消到特定的提交点?

有三个不同的推动,我想恢复到第一次推动.我读到了关于hg rollbackhg undo命令的内容,但我不知道如何使用它们来完成此任务.

Mik*_*x6r 14

因为您已推送到另一个存储库,所以无法知道更改传播到的位置.如果你没有推动,你可以做撤消,但是只撤消只做最后一次交易.

真正修改历史记录的另一个选项是strip命令,但同样,因为你已推送,这不是一个选项.如果您剥离了本地,那么下次拉动时您仍然可以获得更改集.

如果您可以访问中心,则可以将其删除,但如果其他人已经撤消了更改,则下次推送时它们会再次出现在中央.

此时您唯一安全的选择是退出命令.这基本上会在提示处创建一个新的变更集,以反转您意外添加的变更集.


Obe*_*nne 14

从"纯粹的"Mercurial的角度来看,Mike是正确的 - 推动的变更集是你无法控制的.但是,在实践中,这通常是一个过于严格的观点.

与迈克所说的相反,剥离已推动的变更集可能是一种选择.这取决于您是否可以控制中央存储库(也可以在那里进行剥离)以及您的团队/社区的规模以及它的组织方式.

如果您确定没有人已经撤消了您的不良变更集,只需剥离您的本地和中央仓库 - 已完成,历史记录已删除.

如果有人可能已经取消了您的不良变更集,您也必须剥离本地和中央仓库,并且您必须通知所有推动团队成员在其本地回购中删除不良变更集(或从被剥夺的中央回购).如果你很幸运,每个人都按照你说的去做.否则,变更集迟早会再次出现在中央仓库中.

最重要的是剥离可能是像你这样的案件的解决方案 - 你必须平衡成本(你的团队负担额外的工作)和利益(干净的历史).


如果您不小心添加了大型二进制文件,那么收益将超过成本的实际示例.在这种情况下,可能每个团队成员都喜欢同步剥离而不是使用破碎的存储库.


更新:您可以使用服务器端挂钩来防止剥离的变更集重新进入中央存储库 - 请在此处阅读更多内容.