2011-11-17 54 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 
相關問題