Mercurial:如何修改最后一次提交?

我正在寻找Mercurial中的git commit --amend的对手部分,即修改我的工作副本链接到的提交的方法。 这个修改程序的要求是:

  • 如果可能的话,它不应该需要任何扩展。 它不能要求非默认的扩展名 ,即没有官方Mercurial安装的扩展名。

  • 如果提交修改是我当前分支的一个负责人,则不应创建新的负责人 。 如果提交不是头,则可能会创建一个新头。

  • 程序应该是安全的,如果出于某种原因修改失败,我希望恢复修改前的工作副本和存储库状态。 换句话说,如果修改本身可能失败,则应该有一个故障安全过程来恢复工作副本和存储库状态。 我指的是修正过程(比如冲突)性质的“失败”,而不是文件系统相关的问题(如访问限制,不能锁定文件以便写入...... )

  • 更新(1):

  • 该过程必须是可自动化的 ,所以它可以由GUI客户端执行,而无需任何用户交互。
  • 更新(2):

  • 不得触摸工作目录中的文件(某些修改后的文件可能存在文件系统锁定)。 这尤其意味着,一个可能的方法可能在任何时候都不需要一个干净的工作目录。

  • 随着Mercurial 2.2的发布,你可以在hg commit使用--amend选项来更新当前工作目录的最后一次提交

    从命令行参考:

    可以使用--amend标志来修改工作目录的父目录,除了那些当前由hg状态报告的内容(如果有的话)之外,还可以使用包含父项更改的新提交。 旧的提交存储在.hg / strip-backup中的备份包中(请参阅hg help bundle和hg help unbundle以了解如何恢复它)。

    除非指定,否则消息,用户和日期取自修改的提交。 当没有在命令行中指定消息时,编辑器将以修改的提交消息打开。

    重要的是,这种机制是“安全的”,因为它依赖于相对较新的“阶段”功能来防止更新,这些更新会改变已在本地存储库之外提供的历史记录。


    您有3个选项可以编辑Mercurial中的提交:

  • hg strip --keep --rev -1撤消最后一次提交,因此您可以再次执行此操作(有关更多信息,请参阅此答案)。

  • 使用Mercurial附带的MQ扩展

  • 即使Mercurial不附带,Histedit扩展也值得一提

  • 您还可以查看Mercurial wiki的编辑历史页面。

    简而言之,编辑历史真的很难受,也很沮丧 。 如果您已经推动了您的更改,那么除了您完全控制了所有其他克隆之外,几乎没有任何事情可以做。

    我并不十分熟悉git commit --amend命令,但AFAIK,Histedit似乎是最接近的方法,但遗憾的是它没有与Mercurial一起发货。 MQ的使用真的非常复杂,但你几乎可以做任何事情。


    相当于hg commit --amend GUI hg commit --amend

    这也适用于TortoiseHG的GUI(我使用v2.5):

    切换到“提交”视图,或者在工作台视图中选择“工作目录”条目。 'Commit'按钮有一个名为'Amend current revision'的选项(点击按钮的下拉箭头查找它)。

    在这里输入图像描述

              ||
              ||
              /
    

    在这里输入图像描述

    注意事项

    只有当mercurial版本至少为2.2.0,并且如果当前修订版未公开,这个额外选项才会启用,不是补丁程序,也没有子项。 [...]

    单击该按钮将会调用'commit --amend'来修改修订版本。

    有关THG开发通道的更多信息

    链接地址: http://www.djcxy.com/p/6409.html

    上一篇: Mercurial: how to amend the last commit?

    下一篇: Eclipse find in project?