2011-11-17 115 views
8

我在Mercurial存储库中有一些旧的提交消息应该更改(以调整某些新工具)。我已经明白,这种黑客行为必须在主存储库上完成,并且所有本地存储库都必须重新克隆,因为所有后续更改集的校验和也会更改。如何在分支之后编辑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

你真的*确定你需要这样做吗?我很好奇,什么样的工具更换的强迫你承担这个。 –

+1

AFAIK,您不能使用MQ或HistEdit分支之后编辑提交信息,我不知道能做到这一点的其他工具。@Sergey如果你仔细阅读这个问题,你会发现你提供的链接根本没有任何帮助,OP已经尝试过解决方案提出了他们的;) – krtek

+0

@krtek我仔细阅读它。特别是错误信息。所以如果存储库已经在用户之间克隆,那么所有用户都会遇到问题。 –

回答

4

我会用convert extension的黑客版本来做到这一点。该扩展可以做汞柱→汞柱转换,它可以让你改变作者和分支名称。目前还不支持更改提交消息,但可以破解它。

具体来说,你应该改变从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() 
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 
相关问题