2014-02-20 74 views
8

有没有办法在使用TortoiseHg发生其他提交后在Mercurial上编辑提交消息?我看过这些帖子:编辑Mercurial之前的提交消息 - TortoiseHg

How to edit incorrect commit message in Mercurial?

Mercurial: how to amend the last commit?

,并已能够更新“常规”提交信息时,它是一个分支最新提交(使用TortoiseHg)。但是,在我想编辑的其他提交发生后,我无法弄清楚如何编辑提交消息。它总是编辑最后一次提交。

基于埃德科特雷尔的评论,我做了一个测试,我没有推到中央回购做出两次提交,我仍然有同样的问题 - 只有最后提交信息进行编辑。

编辑:我要澄清,我希望更新已经推了变更。

+0

自提交问题后,您是否推送到远程存储库? –

+0

是的,所以我在导入到MQ之前将阶段更改为草稿 – sdoca

+0

这是一个不同的问题;你是否试图在修补程序或核心存储库上更改提交消息? –

回答

3

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

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

如果你能明确地清除所有其他回购这种变化,因此,只有本地副本留给你基本上可以到达“草案”状态。请注意,如果任何回购具有“旧”变更集,它将在某一天被推到中央回购库,并导致我们试图避免的混乱。


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

如果它后面有变化,我将使用mqhg qimport所有更改,直至包括您想要编辑提交消息的更改。 hg qpop -a然后hg qpush转到表示要编辑的变更集的修补程序。然后hg qrefresh -e并进行更改。然后只需hg qfin -a,你应该很好去。

9

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

不幸的是,这个命令不被TortoiseHG GUI,所以你需要运行命令行命令的支持。

+0

我在我的TortoiseHg中启用了histedit。你如何从UI访问它? – sdoca

+0

@sdoca - AFAICS,'histedit'还没有GUI –

+0

嗨,我发现这个网页:http://i-proving.com/2011/01/20/TortoiseHG-How-to-rename-a-changeset/其中展示了如何结合TortoiseHg使用histedit。它只是创建旧的提交分支。我在想,一旦你推动了,改变评论就不可行。 – sdoca

3

从爱德华兹的建议是好的 - 如果你推你切换到另一个仓库,你应该考虑他们一成不变的,而不是更新的提交信息或他们的任何其他方面。

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

当使用演变,您可以编辑第二个到最后提交信息像这样

$ 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中阅读更多关于此的内容。

+0

谢谢。对于我的具体情况,我想更新提交中的评论,而不幸是倒数第二。但在此期间我学到了一些水银技巧。 – sdoca

相关问题