代码之家  ›  专栏  ›  技术社区  ›  Sylvain

如何修复多变的变更集注释中的错误?

  •  6
  • Sylvain  · 技术社区  · 16 年前

    有没有办法重写 hg commit 如果输入了错误的信息,将显示消息?在提交变更集时,我们总是包含bug id。例如:

    hg commit -m "Bug 14585: LastName field should be mandatory"

    但是,如果我输入了错误的bug id,那么在提交变更集并将其推送到中央repo之后,是否有方法(可能通过扩展)修复注释?

    5 回复  |  直到 13 年前
        1
  •  3
  •   ataylor    16 年前

    这个 histedit 你可能在找分机。它允许您在事后编辑提交消息。它还允许您删除或折叠修订,就像 git rebase --interactive .

    请注意,您必须在要修复的回购上启用和使用扩展;无法编辑远程回购的历史记录。此外,我会非常谨慎地使用这个在中央回购。正如tim post所指出的,多变的变更集并不意味着要被改变。

        2
  •  4
  •   jemfinch    16 年前

    如果你还没做 任何东西 否则,您可以对存储库执行“hg回滚”并重新提交。

        3
  •  2
  •   Sylvain    15 年前

    我找到了修复提交消息的方法 如果 不正确的变更集仍然是回购协议的尖端。

    假设变更集24具有无效注释。还假设file1.txt包含在变更集中。您可以将假更改提交到file1.txt,然后使用不正确的更改集折叠假更改集并提供新消息。

    cd centralrepo
    echo  >> file.txt
    hg commit -m "fake commit"
    
    hg collapse 24:25 -m "Bug 14555: LastName field should be mandatory"
    

    这是一个黑客,但它做的工作,并没有留下任何更正的痕迹。创建一个扩展来实现这一点并将其转换为一个易于使用的解决方案可能并不难。

        4
  •  2
  •   Mark Booth    13 年前

    如果回滚和重新提交不是一个选项,或者您已经将更改推到上游,那么 histedit extension 靠自己是没用的,那么水银 不变的历史 会给你带来麻烦。不管你做什么,你都会留下明显的 poisoned 不需要的变更集可能随时重新注入到存储库中。

    修正错误

    如果您处于这种情况下,那么您有两个选项,这取决于更改传播的距离和更改集的距离。

    我以前用过这两种方法。

    用同级分支修复并弃用/删除旧分支

    如果只有几个变更集,并且由于某种原因无法使用hitsedit扩展,则可以将这些变更集导出为修补程序,然后将它们重新应用于父变更集。对于第一个变更集(要更改其历史记录的变更集),需要使用 hg patch --no-commit 然后 hg commit 带着新消息。剩下的,就用 hg patch 按原样导入更改和提交消息。

    这个方法的问题是,最终会有两个分支,其中一个需要永远忽略(在切换回固定分支之前,我将更新到错误的变更集并将该分支标记为已弃用)。

    或者,您需要找到包含此分支和 hg strip 它。这里的问题是,有些机器可能没有启用mercurial队列扩展,如果您甚至错过了一个repo,并且该repo与另一个repo同步,则更改开始重新提交。

    使用子分支修复并在后续更改中合并

    如果变更集已经传播太远,您可以尝试更新到受影响的修订版,强制虚拟提交,并在该提交消息中解释前一个提交消息的错误。然后,可以将此变更集与当前分支提示合并,以使所有内容都保持最新。

    例如,如果错误的消息是“closes 5234”,并且应该是“closes 5324”,则子消息可以是“uncloses 5234,closes 5324”。

        5
  •  1
  •   Tim Post Samir J M Araujo    16 年前

    Mercurial中的变更集是故意的 不变的 . 如果你已经提交了,不,你不能更改修订的文件。但是,有一个指南 edit the history ,但要非常非常 非常 小心不要在这个过程中搞砸你的回购协议。

    似乎您只想编辑commit消息,您可以这样做。

    推荐文章