336

私は現在 TortoiseHg (Mercurial) を使用していますが、誤って間違ったコミット メッセージをコミットしてしまいました。リポジトリでこのコミット メッセージを編集するにはどうすればよいですか?

4

12 に答える 12

252

更新: Mercurial が追加されました。--amendこれは現在推奨されるオプションです。


最後のコミット (最後のコミットのみ) をロールバックしてhg rollbackから再適用できます。

重要: これにより、最新のコミット(またはプル) が完全に削除されます。したがって、hg updateそのコミットが作業ディレクトリに存在しなくなった場合、それは永久に失われます。ということで、まずはコピー。

それ以外では、リポジトリの履歴 (コミット メッセージを含む) を変更することはできません。あなたができる唯一のことは、特定の変更セットの後に履歴を整理し、それに応じて再作成することです。

すでに変更を公開している場合 (すべてのコピーを取得できない限り)、これは機能しません。また、GPG 署名されたコミット (他の人による) を含む「履歴を書き換える」こともできません。

于 2009-03-08T05:05:34.900 に答える
91

さて、私はこのようにしていた:

500 件のコミットがあり、誤ったコミット メッセージが r.498 にあるとします。

hg qimport -r 498:tip
hg qpop -a
joe .hg/patches/498.diff
(change the comment, after the mercurial header)
hg qpush -a
hg qdelete -r qbase:qtip
于 2009-07-27T13:10:21.783 に答える
70

良いニュース: hg 2.2でgit のようなオプションが追加されました。--amend

tortoiseHgでは、コミットボタンの右側にある黒い矢印を選択して、「現在のリビジョンを修正」を使用できます

a

于 2012-05-13T13:12:36.103 に答える
49

これが古い投稿であることは承知しており、質問に回答済みのマークを付けました。私は最近同じものを探していましたが、histedit拡張機能が非常に便利であることがわかりました。プロセスはここで説明されています:

http://knowledgestockpile.blogspot.com/2010/12/changeing-commit-message-of-revision-in.html

于 2011-01-01T15:30:32.250 に答える
20

TortoiseHg で、変更したいリビジョンを右クリックします。「履歴の変更」->「MQ のインポート」を選択します。これにより、選択したリビジョンまでのすべてのリビジョンが、Mercurial チェンジセットから Mercurial Queue パッチに変換されます。メッセージを変更するパッチを選択すると、画面が自動的に MQ エディターに変わります。画面中央のメッセージを編集し、QRefresh をクリックします。最後に、パッチを右クリックして [履歴の変更] -> [パッチの終了] を選択します。これにより、パッチが変更セットに変換されます。

ああ、これは、MQ がこのリポジトリで TortoiseHG のアクティブな拡張機能であることを前提としています。そうでない場合は、[ファイル] -> [設定] をクリックし、[拡張機能] をクリックして、[mq] チェックボックスをクリックします。拡張機能をアクティブにする前に TortoiseHg を閉じる必要があることを警告するはずなので、閉じてから再度開きます。

于 2012-08-16T19:38:34.123 に答える
12

編集:ユーザーが指摘したように、MQ を使用しないでくださいcommit --amend。この答えは現在、主に歴史的な関心事です。

他の人が言及しているように、MQ 拡張機能はこのタスクにより適しているため、作業を破壊するリスクはありません。これをする:

  1. 次のようなものを hgrc に追加して、MQ 拡張機能を有効にします。

    [extensions]
    mq =
    
  2. 編集したい変更セットに更新します。通常は次のヒントを参考にしてください。

    hg up $rev
    
  3. 現在の変更セットをキューにインポートします。

    hg qimport -r .
    
  4. パッチを更新し、コミット メッセージを編集します。

    hg qrefresh -e
    
  5. 適用されたすべてのパッチ (この場合は 1 つ) を終了し、それらを通常の変更セットとして保存します。

    hg qfinish -a
    

私は TortoiseHg に詳しくありませんが、コマンドは上記のものと似ているはずです。また、履歴の編集にはリスクが伴うことも言及しておく価値があると思います。変更セットが他の場所にプッシュまたはプルされていないことが絶対に確実な場合にのみ、これを行う必要があります。

于 2010-08-19T15:29:13.233 に答える
6

ロールバックして再適用するのは非常に単純な解決策ですが、最後のコミットでしか役に立ちません。Mercurial Queues ははるかに強力です ( "hg q*" コマンドを使用するには、Mercurial Queues Extension を有効にする必要があることに注意してください)。

于 2009-10-26T08:06:50.967 に答える
1

私はこのようにしました。まず、変更をプッシュしないでください。そうしないと、運が悪くなります。折りたたみ拡張機能をつかんでインストールします。別のダミーチェンジセットをコミットします。次に、collapseを使用して、前の2つのチェンジセットを1つに結合します。新しいコミットメッセージの入力を求められ、開始点としてすでに持っているメッセージが表示されます。元のコミットメッセージを効果的に変更しました。

于 2010-08-11T23:18:08.597 に答える
1

編集したいリビジョンがそれほど古くない場合に使用する 1 つのハック:

あなたがリビジョン 500 にいて、497 を編集したいとしましょう。

hg export -o rev497 497
hg export -o rev498 498
hg export -o rev499 499
hg export -o rev500 500

rev497 ファイルを編集し、メッセージを変更します。(「#」で始まる最初の行の後です)

hg import rev497
hg import rev498
hg import rev499
hg import rev500
于 2013-08-19T13:46:40.573 に答える
0

MQ 拡張機能とデバッグ コマンドを使用する別の方法があります。これは、データを失うことなく履歴を変更する一般的な方法です。アントニオと同じ状況を想定してみましょう。

// set current tip to rev 497
hg debugsetparents 497
hg debugrebuildstate
// hg add/remove if needed
hg commit
hg strip [-n] 498
于 2011-11-30T23:10:09.397 に答える