私は Mercurial で愚かなミスを繰り返しています。多くの場合、「hg pull」や「hg update」を実行せずに作業を開始します。変更をプッシュしようとすると、エラーが発生します。
複数のヘッドやブランチなどを作成しないように、ローカル コミットを削除する方法はありますか? ローカル コミットを削除し、変更をチップとマージしてから、再度コミットしたいだけです。簡単そうですよね?ローカル コミットを簡単に削除して、チップときれいにマージする方法が見つからないようです。
繰り返しますが、私は「hg ci」で行われたローカルコミットを削除しようとしているだけです。ファイルを変更したり、元に戻したりすることはしたくありません。
ベストアンサー1
「strip」拡張機能を有効にして、次のように入力します。
hg strip #changeset# --keep
#changeset#
削除したい変更セットのハッシュはどこにありますか。これにより、その変更セットとその派生の変更セットが削除され、作業ディレクトリはそのまま残ります。コミットしたコードの変更も元に戻したい場合は、--keep
オプションを削除してください。
詳細については、ストリップ拡張機能を参照してください。
「不明なコマンド 'strip'」が表示された場合は、それを有効にする必要があるかもしれません。そのためには、.hgrc
またはMercurial.ini
ファイルを見つけて、次の内容を追加します。
[extensions]
strip =
(Juozas がコメントで述べたように) 複数のヘッドを持つことは Mercurial の通常のワークフローであることに注意してください。これに対処するために strip コマンドを使用しないでください。代わりに、現在のヘッドを新しいヘッドとマージし、競合を解決してテストしてからプッシュする必要があります。
このstrip
コマンドは、ブランチを汚染する変更セットを本当に取り除きたいときに便利です。実際、この質問の状況にあり、すべての「ドラフト」変更セットを完全に永久に削除したい場合は、基本的に次の操作を行うことを提案している一番上の回答を確認してください。
hg strip 'roots(outgoing())'