【问题标题】:How do you delete a commit in Mercurial?如何删除 Mercurial 中的提交?
【发布时间】:2011-07-02 09:04:34
【问题描述】:

我想完全删除一个 Mercurial 提交,就好像它从未进入存储库一样,然后回到我之前的提交。

这可能吗?

【问题讨论】:

标签: mercurial mercurial-commit


【解决方案1】:

如果这是您的最后一次提交并且您还没有将它推送到任何地方,您可以使用rollback 进行操作。否则,没有。并不真地。是时候更改密码了。

编辑: 有人指出,您可以从旧版本中克隆并合并您想要保留的更改。这也是正确的,除非您将其推送到您无法控制的回购中。一旦你推送,你的数据很可能很难取回。

【讨论】:

  • 哈哈我不小心这样做了(我的 ssh 私钥)
  • 如果你没有推送修订,那么将阶段更改为秘密呢?
  • @mikeyUX:这个答案是在 2.1 出来之前写的,但是将阶段更改为秘密实际上并没有删除变更集;它只是阻止您在hg outgoing 中看到它或与另一个存储库共享它。将阶段更改为秘密,然后克隆将与我的编辑建议的大致相同。不过,在这样做之前我会使用 histedit 或 mq。
  • 使用 HisteditExtension 你可以删除一个提交。该功能可能比这个公认的答案更新。
  • @stimpy77:如果您推动或有人拉动,Histedit 仍然无济于事。如果这些都没有发生,那么你是对的。如果你问得好,Histedit、mq、rollback 和 strip 都会删除变更集。
【解决方案2】:

您可以尝试删除有关您的提交的 mq 信息。

  • 为此,您需要转到文件->设置->扩展。
  • 检查 mq 并重新启动 gui。
  • 之后只需右键单击不需要的提交并 ModifyHistory->Strip

【讨论】:

  • 你说的是 TortoiseHg 吗?
【解决方案3】:

要编辑历史记录,我会使用 Histedit Extension 扩展名。

 hg histedit 45:c3a3a271d11c

但是请记住,这仅在您尚未将提交推送到公共存储库、您拥有公共存储库和/或您可以解释那里的所有克隆的情况下才有意义。如果您收到以下错误:

abort: can't rebase immutable changeset 43ab8134e7af

这意味着 Mecurial 认为这是一个已被推送的公共变更集(参见 phases) - 您可以再次将其强制为 draft

hg phase -f -d 45:c3a3a271d11c

【讨论】:

  • 我相信这是更正确的最新答案。汞会进化。
【解决方案4】:

我经常遇到这种情况。我提交并然后拉推。但是后来有一些东西使我新提交的提交变得不必要。一个普通的hg rollback 是不够的,因为它只会撤消拉取...

这是要做的事情:

hg strip <rev>

当您不将变更集推送到任何地方时,一切都会变得轻松。

【讨论】:

    【解决方案5】:

    您基本上可以使用“hg backout”进行反向合并。所有选项都在免费提供的“Mercurial:权威指南”一书中进行了讨论:

    http://hgbook.red-bean.com/read/finding-and-fixing-mistakes.html

    【讨论】:

    • 我意识到我的建议并没有删除提交,但链接确实讨论了所有选项,包括 nmichaels 建议的“hg rollback”选项。
    • 一般来说我喜欢这个解决方案。承认你的错误并保留你的错误提交的历史以及你支持它们的事实是可以的。
    【解决方案6】:

    如果有多个提交和/或您已经将其推送到其他地方,您可以克隆您的存储库并指定应克隆的最后一个变更集。

    在此处查看我的答案如何执行此操作:
    Mercurial: Fix a borked history

    如果你只在本地提交而不推送,你可以在本地创建一个克隆(如我的链接中所述),你就完成了。

    如果您已经推送到某个远程存储库,则必须将其替换为您的克隆。
    当然,这取决于您是否能够(或允许)这样做。

    【讨论】:

      【解决方案7】:

      如果使用乌龟,你可以使用修改历史>剥离...

      【讨论】:

        【解决方案8】:

        是的。除非我弄错了,否则从 v2.3(rel. 2012/08/01)开始,您可以使用 HisteditExtension drop 命令以及 strip 或 @987654324 来删除提交@ 删除更改​​。

        对该功能的简单 Google 搜索:https://www.google.com/webhp#q=histedit+drop

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-09-17
          • 2015-04-28
          • 1970-01-01
          • 2011-09-25
          • 2011-03-20
          • 2011-07-30
          • 1970-01-01
          • 2018-01-02
          相关资源
          最近更新 更多