web-dev-qa-db-ja.com

すべてのローカルチェンジセットを削除してツリーに戻す

私はMercurialを使用していますが、3つの頭を持つ、ひどい混乱状態に陥っています。私はプッシュできません。ローカルの変更とコミットをすべて削除し、完全にクリーンなコードとクリーンな履歴でやり直したいだけです。

言い換えれば、(a)リモートブランチの先端に存在するのとまったく同じコードをローカルに、そして(b)ローカルコミットの履歴を持たないことになります。

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

明確にするために、私はローカルで行った作業を保存することに興味がありません。完全にクリーンなローカルチェックアウトに戻す最も簡単な方法が必要です。

94
Richard

最も簡単な方法(新しい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())'
128
just somebody

リモートリポジトリにも存在する変更セットのみを保持するローカルクローンを作成する必要があります。 TortoiseHghg logなどを使用して、最新のリビジョンがどれであるかを判断しますdid n't make(混乱が始まる前のリビジョン)。 hg outgoingを使用すると、ここで役立ちます-行ったすべての変更セットが一覧表示されます-それらのいずれよりも早いリビジョン番号を選択します。

ターゲットリビジョンの名前がgoodで、クローンの名前がfooの場合、次のようにします。

hg clone -r good foo foo-clean

これは高速なローカル操作になります-すべてを再度ダウンロードする理由はありませんfoo-cleanクローンには、リビジョンgoodまでの変更セットのみが含まれます。 foo-clean/.hg/hgrcfoo/.hg/hgrcに置き換えて、デフォルトのプッシュ/プルパスなどのリポジトリローカル設定を保持できるようになりました。

foo-cleanfooから必要なものをすべて持っていることに満足したら、fooを削除し、foo-cleanの名前をfooに変更します。 hg pullを実行して、リモートリポジトリからクローンに新しい変更セットを取得し、通常のように続行します。


誰も新しい変更セットをリモートリポジトリにプッシュしていない場合、上記のgoodとして使用するリビジョンを決定するのは非常に簡単です。hg id defaultは、リモートリポジトリのtipのIDを通知します。

21
Martin Geisler

OK。したがって、すべてのローカルのものを削除してください。hg init新しいローカルリポジトリとhg pull最新のヒント。この後hg updateを忘れないでください。

9
alemjerus

使用してもよい

hgストリップリビジョン

ローカルリポジトリのリビジョンとそのサブツリーを強制終了します。

https://www.Mercurial-scm.org/wiki/Strip

ただし、すでにプッシュされているものには使用しないでください。

5
averasko
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`
2
Sebastian

ローカルシステムにあるすべてのものを削除し、リモートリポジトリのクローンを再作成するだけです。

2
OJ.

TortoiseHgを使用している場合、(小さな)混乱から抜け出す簡単な方法の1つは、最初に最新のリビジョンに更新し、次に変更セットを選択して「ローカルとマージ」を開始することです。マージダイアログが表示されたら、小さな「+」アイコンをクリックしていくつかの追加オプションを表示します。そのうちの1つは「変更セットをマージターゲット(他の)リビジョンから破棄する」です。これを行うと、変更セットはレポジトリに残ってプッシュされますが、マージでは破棄されるため、効果はありません。多くのヘッドにまたがる多くのチェンジセットがある場合、この方法でレポを汚染したくないかもしれませんが、単純な修正であり、破棄するチェンジセットに後で参照したいデータが含まれているかどうかを検討する価値があります。

0
MrFlamey