2012-06-25 57 views
1

是否有安全方式要重命名舊的提交(同時沒有發生分支),這是大約五六個提交當前提示的道路?重命名舊提交

+1

你是什麼意思「重命名」?提交沒有要更改的名稱。 –

+0

@PaulS - 無需過於迂腐。我認真考慮過每個人都會明白這個措詞。如果您願意,如何更改日誌消息。 – Rook

+0

不要試圖迂腐,只是不確定你想做什麼。例如,您可能一直在討論分支名稱,並且您有一個答案,告訴您如何更改分支名稱。不僅僅是我被誤解了。 –

回答

3

這取決於您是否已經將此提交推送到公共回購協議,或者支票合併。當提交已經公開可見時,以後無法更改提交。此外,可能的MQ工作不允許在之後編輯合併提交。

當提交不公開可見時,則可以將所有提交導入MQ(啓用mq擴展並針對提交是祖先的每個修訂調用hg qimport -r»Revision«)。然後你用hg qpop --all不應用所有補丁。之後,您可以使用hg branch »name«更改分支名稱,當您提交時確實引入了新的分支名稱(在qpop之後,如果沒有分支,您的提交的祖先的分支名稱將用於下一個qpush命令名稱是顯式設置)。當你想編輯提交信息時,你可以通過hg qpush && hg qrefresh -e來完成。要完成編輯,請致電hg qpush --all && hg qfinish --applied

編輯:示例工作流

之所以這樣說,是初始狀態,並要編輯4:

8 [default] (tip) 
| 
7 
| 
6 
| 
5 
| 
4 
| 
3 
| 
2 
| 
1 
| 
0 

現在你導入所有的版本,包括4,放入水銀隊列,hg qimport -r 4:8,現在您有以下歷史記錄:

8 [default] (8.diff, qtip, tip) 
| 
7 (7.diff) 
| 
6 (6.diff) 
| 
5 (5.diff) 
| 
4 (4.diff, qbase) 
| 
3 (qparent) 
| 
2 
| 
1 
| 
0 

下一步是取消應用所有補丁:hg qpop --all

3 [default] (tip) 
| 
2 
| 
1 
| 
0 

不要驚慌,你的歷史沒有消失,它仍然存在於.hg/patches中。現在分支名稱可以設置爲hg branch newbranch。這在歷史記錄中不可見,直到創建新的提交。但分行名稱可以用hg branch顯示。

現在第一冷凍提交的時候可以重新申請與hg qpush

4 [newbranch] (4.diff, qbase, qtip, tip) 
| 
3 [default] (qparent) 
| 
2 
| 
1 
| 
0 

現在你可以改寫的提交信息與hg qrefresh --edit。您也可以通過編輯工作副本中的某些文件來更改內容。因此,如果您只想更改提交信息,請確保您在致電hg qrefresh之前未修改工作副本中的任何文件。如果您在致電hg qrefresh之前運行hg status,則可以檢查此項。

4 [newbranch] (4.diff, qbase, qtip, tip) {new commit message} 
/
3 [default] (qparent) 
| 
2 
| 
1 
| 
0 

您可以hg qpushhg qpop編輯還承諾,將導航到每個人。完成後,您需要將補丁程序轉換回常規修訂版本。這通過應用所有補丁完成,並完成隊列。這由hg qpush --all完成,然後是`hg qfinish --all。現在的歷史是這樣的:

8 [newbranch] (tip) 
    | 
    7 
    | 
    6 
    | 
    5 
    | 
    4 {new commit message} 
/
3 [default] 
| 
2 
| 
1 
| 
0 
+0

+1這只是我本地的離線回購,個人項目。在此期間沒有合併,分支或任何事情發生,也沒有被推到任何地方。要求給我一個簡單的例子,說明我需要做些什麼來重命名它,是否太多了?我不明白,不幸的是,上述的一半 - 但是,我再次以相當簡單的方式使用hg。 – Rook

0

由於這是尚未在任何地方推私人回購協議,它應該是絕對安全的編輯歷史。 (請注意,在一般情況下,,歷史編輯不是一個可行的選項。它只適用於回購尚未公佈的情況。)

有很多Mercurial擴展允許編輯歷史記錄,mq就是其中之一。但是,histedit擴展可能更容易在你的情況。它不包含在Mercurial中,但可以從https://www.mercurial-scm.org/wiki/HisteditExtension相當容易地安裝。

一旦它的成立:

$ hg histedit -r $ID_OF_THE_CHANGESET_YOU_WANT_TO_EDIT 

這將打開任何一個文本編輯器,您通常使用hg commit,與變更集的列表;此列表包含之後的每個變更集,因此請滾動至底部。你會看到這樣的事情每個變更:

pick 2d5657b340e5 The original message for that commit 

對於您需要修改變更,變更pickedit。然後保存並退出。回到shell提示符下,執行:

$ hg histedit --continue 

和往常一樣,系統會提示您提供新的提交消息。