1. ホーム
  2. version-control

[解決済み] ローカルチェンジセットをすべて削除し、ツリーに戻す

2023-02-05 17:33:24

質問

Mercurial を使っているのですが、ローカルで3つの頭でひどい混乱に陥っています。プッシュができないので、ローカルの変更とコミットをすべて削除し、完全にクリーンなコードとクリーンな履歴で再スタートしたいのですが、どうすればいいですか?

言い換えれば、私は (a) リモートブランチの先端に存在するのとまったく同じコードをローカルに終了したい、そして (b) どんなローカルコミットの履歴もない状態にしたいのです。

私が知っているのは hg update -C はローカルの変更を上書きすることは知っています。しかし、どのようにローカルコミットを削除するのでしょうか?

はっきり言って、私はローカルで行ったどんな仕事も保存することに興味がありません。私は、完全にクリーンなローカル チェックアウトに戻るための最も簡単な方法が欲しいだけです。

どのように解決するのですか?

最も簡単な方法(新しい hg clone ) が実用的でない場合、私は hg strip :

% hg outgoing -l 1
% hg strip $rev # replace $rev with the revision number from outgoing

まで繰り返す。 hg outgoing が静かになるまで繰り返す。なお hg strip $rev を消す $rev とその子孫をすべて消去します。

なお、このとき を最初に有効にします。 strip を有効にする必要があるかもしれません。 .

PS: さらにスマートなアプローチは、revset言語を使用して、行うことです。

% hg strip 'roots(outgoing())'