我在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
问题似乎是在变更集之后创建了分支。
如果我想改变修补程序的内容,我可以看到它会变得如何变得混乱,但也许还有我在编辑提交消息时错过的解决方法?
答案 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)
如果由于使用--amend
和push --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。