如何在分支后编辑Mercurial提交消息?

时间:2011-11-17 02:12:02

标签: version-control mercurial commit-message

我在Mercurial存储库中有一些旧的提交消息应该更改(以调整一些新工具)。我已经明白,必须在主存储库上完成此黑客操作,并且必须重新克隆所有本地存储库,因为所有后续更改集的校验和也将更改。

我已尝试按照" How to edit incorrect commit messages in Mercurial?"中的配方进行操作,但是对于MQ扩展我遇到了错误信息

X:\project>hg qimport -r 2:tip
abort: revision 2 is the root of more than one branch

与Histedit非常相似

X:\project>hg histedit 2
abort: cannot edit history that would orphan nodes

问题似乎是在变更集之后创建了分支。

如果我想改变修补程序的内容,我可以看到它会变得如何变得混乱,但也许还有我在编辑提交消息时错过的解决方法?

3 个答案:

答案 0 :(得分:4)

我会使用convert extension的黑客版本来执行此操作。扩展程序可以执行 hg→hg 转换,这样您就可以更改作者和分支名称。目前还不支持更改提交消息,但您可以破解它。

具体来说,您应该更改getcommit方法:

def getcommit(self, rev):
    ctx = self.changectx(rev)
    parents = [p.hex() for p in self.parents(ctx)]
    if self.saverev:
        crev = rev
    else:
        crev = None
    return commit(author=ctx.user(), date=util.datestr(ctx.date()),
                  desc=ctx.description(), rev=crev, parents=parents,
                  branch=ctx.branch(), extra=ctx.extra(),
                  sortkey=ctx.rev())

负责阅读旧提交。

desc=ctx.description()

desc=adjust(ctx.description())

然后在文件顶部实现adjust函数:

def adjust(text):
    return text.upper()

答案 1 :(得分:2)

如果由于使用--amendpush --force这些是意外/重复分支,则先将它们剥离并再次尝试'histedit',然后擦除bitbucket上的中央仓库;尝试下面这对我有用:

检查存储库日志并查找分支,您可以使用首先启用的GraphlogExtension

# hg log -G | more
...
o  changeset:   43:c2fcca731aa5
|  parent:      41:59669b9dfa4a
|  user:        Daniel Sokolowski (https://webdesign.danols.com)
|  date:        Tue Aug 27 20:14:38 2013 -0400
|  summary:     Progress snapshot: major content text and model instance  ..
...
| o  changeset:   42:c50724a6f1c6 
|/   user:        Daniel Sokolowski (https://webdesign.danols.com)
|    date:        Tue Aug 27 20:14:38 2013 -0400
|    summary:     Progress snapshot: major content text and model instance ...
|
o  changeset:   41:59669b9dfa4a
|  user:        Daniel Sokolowski (https://webdesign.danols.com)
...

启用MqExtension并删除所有分支。

# hg strip --no-backup 42:c50724a6f1c6
# hg strip --no-backup 45:3420dja12jsa
...

如果需要,将提交更改为“草稿”(请参阅​​Phases)并重新运行'histedit',现在一切都应该很好。

# hg histedit 14:599dfa4a669b
abort: cannot edit immutable changeset: b7cfa2f28bde
# hg phase -f -d 14:599dfa4a669b
# hg hsitedit 14:599dfa4a669ba

答案 2 :(得分:0)

我需要类似的东西,所以我提交了feature request