编辑Mercurial早期提交消息 - TortoiseHg

时间:2014-02-20 16:50:11

标签: mercurial message commit tortoisehg

在使用TortoiseHg进行其他提交后,有没有办法在提交时在Mercurial中编辑提交消息?我已经阅读了这些帖子:

How to edit incorrect commit message in Mercurial?

Mercurial: how to amend the last commit?

并且能够更新"常规"当它是分支上的最新提交时使用TortoiseHg提交消息。但是,在我想编辑的其他提交之后,我还没有能够弄清楚如何编辑提交消息。它总是编辑最后一次提交。

根据Ed Cottrell的评论,我做了一个测试,我在没有推送到中央仓库的情况下做了两次提交,我仍然有同样的问题 - 只能编辑最后一次提交消息。

编辑:我应该澄清一下,我正在寻找更新已被推送的变更集。

3 个答案:

答案 0 :(得分:10)

Histedit extension(现在与TortoiseHG捆绑在一起)有一个mess命令,用于更改历史更改集的提交消息。

不幸的是,TortoiseHG GUI不支持此命令,因此您需要从命令行运行该命令。

答案 1 :(得分:3)

只要问题的变化是本地的,并且没有被推到任何地方,就有可能。

提交消息用于计算全局唯一的哈希id,该哈希ID用于所有存储库以确定它们是否已具有变更集。 如果更改提交消息,则更改唯一的哈希ID,并且每个仓库都会将其视为“新”变更集。所有其他具有旧变更集的存储库将尝试获取新变更集并询问你将它与自己合并......这不是一件好事,所以对你的问题的简短回答是“不要这样做”。

如果您可以明确地从所有其他回购中清除该更改,那么只剩下本地副本,您基本上可以进入“草稿”状态。请注意,如果任何 repo具有“旧”变更集,那么有一天它将被推送到中央仓库并导致我们试图避免的混乱。


如果变更集仍然是本地的(例如,处于draft状态),如果它是工作目录的父目录,则可以使用hg commit --amend

如果之后有更改,我会使用mqhg qimport所有更改,包括您要编辑提交消息的更改。 hg qpop -a然后hg qpush转到代表您要编辑的变更集的补丁。然后hg qrefresh -e并进行更改。然后只需hg qfin -a你应该好好去。

答案 2 :(得分:3)

爱德华的建议是好的 - 如果你把你的更改推送到另一个存储库,你应该考虑它们并不更新提交消息或它们的任何其他方面。

但是,我们正在努力改变Mercurial中的这一点。有一个实验性扩展,允许您进行更广泛的历史编辑,并将这些编辑推送到其他存储库。它被称为Evolve Extension,它可以使某些行为部分位于Mercurial的核心,部分位于核心之外。

使用evolve时,您可以像这样编辑倒数第二个提交消息

$ hg update .^
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg commit --amend -m 'new commit message'
1 new unstable changesets    
$ hg stabilize
more:[5] old tip changeset
atop:[6] new commit message

只要更改集处于草稿阶段,扩展程序就允许您执行此操作。要在将它们推送到某个位置后将它们保持在草稿阶段,您需要将存储库配置为非发布存储库。您可以在Changeset Evolution Documentation

中详细了解相关信息