私は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
とそのすべての子孫を抹消することに注意してください。
最初にMercurialの設定でstrip
を有効にする にする必要があることに注意してください。
PS:さらに賢いアプローチは、revset言語を使用することです。
% hg strip 'roots(outgoing())'
リモートリポジトリにも存在する変更セットのみを保持するローカルクローンを作成する必要があります。 TortoiseHg 、hg log
などを使用して、最新のリビジョンがどれであるかを判断しますdid n't make(混乱が始まる前のリビジョン)。 hg outgoing
を使用すると、ここで役立ちます-行ったすべての変更セットが一覧表示されます-それらのいずれよりも早いリビジョン番号を選択します。
ターゲットリビジョンの名前がgood
で、クローンの名前がfoo
の場合、次のようにします。
hg clone -r good foo foo-clean
これは高速なローカル操作になります-すべてを再度ダウンロードする理由はありません。 foo-clean
クローンには、リビジョンgood
までの変更セットのみが含まれます。 foo-clean/.hg/hgrc
をfoo/.hg/hgrc
に置き換えて、デフォルトのプッシュ/プルパスなどのリポジトリローカル設定を保持できるようになりました。
foo-clean
がfoo
から必要なものをすべて持っていることに満足したら、foo
を削除し、foo-clean
の名前をfoo
に変更します。 hg pull
を実行して、リモートリポジトリからクローンに新しい変更セットを取得し、通常のように続行します。
誰も新しい変更セットをリモートリポジトリにプッシュしていない場合、上記のgood
として使用するリビジョンを決定するのは非常に簡単です。hg id default
は、リモートリポジトリのtipのIDを通知します。
OK。したがって、すべてのローカルのものを削除してください。hg init
新しいローカルリポジトリとhg pull
最新のヒント。この後hg update
を忘れないでください。
使用してもよい
hgストリップリビジョン
ローカルリポジトリのリビジョンとそのサブツリーを強制終了します。
https://www.Mercurial-scm.org/wiki/Strip
ただし、すでにプッシュされているものには使用しないでください。
hg strip `hg out --template" {rev} {author}\n "| grep YOUR_AUTHOR_NAME | cut -d "" -f 1`
私のためにトリックを行います。
著者名で作成されたデフォルトのリポジトリにプッシュされないすべてのリビジョンを削除します。
このスタイルを使用して、デフォルトのリポジトリではなく別のリポジトリでチェックすることもできます
hg strip `hg out OTHER_REPO_ALIAS --template" {rev} {author}\n "| grep YOUR_AUTHOR_NAME | cut -d "" -f 1`
ローカルシステムにあるすべてのものを削除し、リモートリポジトリのクローンを再作成するだけです。
TortoiseHgを使用している場合、(小さな)混乱から抜け出す簡単な方法の1つは、最初に最新のリビジョンに更新し、次に変更セットを選択して「ローカルとマージ」を開始することです。マージダイアログが表示されたら、小さな「+」アイコンをクリックしていくつかの追加オプションを表示します。そのうちの1つは「変更セットをマージターゲット(他の)リビジョンから破棄する」です。これを行うと、変更セットはレポジトリに残ってプッシュされますが、マージでは破棄されるため、効果はありません。多くのヘッドにまたがる多くのチェンジセットがある場合、この方法でレポを汚染したくないかもしれませんが、単純な修正であり、破棄するチェンジセットに後で参照したいデータが含まれているかどうかを検討する価値があります。