8

我在 Mercurial 存储库中有一些旧的提交消息,应该更改(以适应一些新工具)。我已经明白必须在主存储库上进行这种黑客攻击,并且必须重新克隆所有本地存储库,因为所有后续变更集的校验和也会发生变化。

我已经尝试按照“如何在 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

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

如果我想更改补丁的内容,我可以看到它会变得多么混乱,但也许有一个我错过了编辑提交消息的解决方法?

4

3 回答 3

4

我会使用转换扩展的黑客版本来执行此操作。该扩展可以进行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()
于 2011-12-01T13:04:14.243 回答
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
于 2013-08-30T16:25:34.520 回答
0

我需要类似的东西,所以我提交了一个功能请求

于 2013-08-18T05:46:18.227 回答