古いコミットの名前を変更する安全な方法はありますか (その間、分岐は発生しません)。現在のヒントから 5 つまたは 6 つのコミットが行われていますか?
2 に答える
これは、このコミットをパブリック リポジトリに既にプッシュしているか、マージを共同で行っているかによって異なります。コミットがすでに公開されている場合、後でコミットを変更する方法はありません。また、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 を含むすべてのリビジョンを で Mercurial キューにインポートすると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 status
を呼び出す前に実行すると、これを確認できますhg qrefresh
。
4 [newbranch] (4.diff, qbase, qtip, tip) {new commit message}
/
3 [default] (qparent)
|
2
|
1
|
0
hg qpush
およびを使用して各コミットに移動することにより、さらにコミットを編集できますhg qpop
。完了したら、パッチを通常のリビジョンに戻す必要があります。これは、すべてのパッチを適用することによって行われ、キューを終了します。これは によって行われhg qpush --all
、その後に`hg qfinish --all
. 履歴は次のようになります。
8 [newbranch] (tip)
|
7
|
6
|
5
|
4 {new commit message}
/
3 [default]
|
2
|
1
|
0