95

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

つまり、(a) リモート ブランチの先端に存在するものとまったく同じコードをローカルで使用し、(b) ローカル コミットの履歴を残さないようにしたいと考えています。

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

はっきりさせておきますが、私はローカルで行った作業を保存することに関心はありません。完全にクリーンなローカル チェックアウトに戻す最も簡単な方法が欲しいだけです。

4

7 に答える 7

131

最も単純な方法 (新しいhg clone) が実用的でない場合、私は次の方法を使用しますhg strip

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

hg outgoing静かになるまで繰り返します。hg strip $revobliterates$revとそのすべての子孫に注意してください。

Mercurial 設定で最初に有効stripにする必要がある場合があることに注意してください。

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

% hg strip 'roots(outgoing())'
于 2010-01-27T00:18:10.637 に答える
21

リモート リポジトリにも存在する変更セットのみを保持するローカル クローンを作成する必要があります。TortoiseHgなどを使用して、作成していないhg log最新のリビジョン(混乱が始まる前のリビジョン) を特定します。を使用すると、ここで役立ちます-作成したすべての変更セットがリストされます-それらのいずれよりも前のリビジョン番号を選択してください。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-cleanfooます。ahg pullを実行して、リモート リポジトリからクローンに新しい変更セットを取得し、通常どおり続行します。


誰も新しい変更セットをリモート リポジトリにプッシュしていない場合、good上記のように使用するリビジョンを決定するのは非常に簡単です:hg id defaultリモート リポジトリ内のヒントの ID がわかります。

于 2010-01-27T00:02:40.873 に答える
9

Ok。hg initしたがって、すべてのローカルのもの、新しいローカルリポジトリ、およびhg pull最新のヒントを削除するだけです. この後もお忘れなくhg update

于 2010-01-26T12:01:53.510 に答える
5

あなたは使用することができます

hgストリップリビジョン

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

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

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

于 2011-07-07T15:18:45.010 に答える
2
hg strip `hg out --template "{rev} {author}\n" | あなたの_AUTHOR_NAMEをgrep | カット -d " " -f 1`

私のためにトリックを行います。

作成者名で作成されたデフォルトのリポジトリにプッシュされていないすべてのリビジョンを削除します。

このスタイルを使用して、デフォルトのリポジトリではなく別のリポジトリでチェックすることもできます

hg strip `hg out OTHER_REPO_ALIAS --template "{rev} {author}\n" | あなたの_AUTHOR_NAMEをgrep | カット -d " " -f 1`
于 2011-08-17T05:48:27.403 に答える
2

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

于 2010-01-26T12:26:30.660 に答える
0

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

于 2014-12-02T14:38:20.143 に答える