サーバーにプッシュする必要がある5つのコミットがあるローカルMercurialリポジトリがあります。ただし、最後の4つのコミットが実際にはそこに(またはチェンジセットの1つにも)入れたくないので、誤って2つの特定のファイルに行を含めました。
これらの2つのファイルのこれらの行を削除する実用的な方法はありますか?(ローカルリポジトリを破棄し、サーバーのコピーを複製し、すべての変更を手動で再適用することは別として)
基本的に同じことを行うさまざまな提案(mq、histedit、import / export)が表示されます。そして、水銀は不変の歴史の概念に基づいて構築されているため、それらはすべて本当に不格好に感じるでしょう-歴史を変えることは難しいはずです。とはいえ、まだcsetsをプッシュしていないかどうかを正しく理解しているので、それは可能です。これが私が使用する手順です-拡張機能を有効にする必要がないので、私はそれを好みます:
hg export --git -o ../all-five-csets.patch 0:tip
cd .. # exit the repo
vi all-five-csets.patch # delete the line manually each time it appears (probably only once)
hg init newrepo
cd newrepo
hg import ../all-five-csets.patch
cd ..
mv repo was-repo
mv newrepo repo
そこで起こっているのは、csetsをそれ自体のテキスト表現にエクスポートしているということだけです。新しい空のリポジトリを作成してから、csetsを再インポートします。5つしかないので全部やりました。500の最後の5つを変更することを検討している場合は、clone -r
「ある時点まで」クローンを作成し、インポートによって編集した形式で残したcsetsを適用することでnewrepoを作成します。
これらの5つのコミットが独立した変更セットであることが重要でない場合は、hg折りたたみを使用して、プッシュを避けたい行を含まない単一の変更セットに折りたたみます。つまり
hg collapse
最後の6つの変更セット(既存の5つのローカル変更セットと、それらの行を削除するだけの新しい変更セット)を折りたたむために使用しますこれにより、ローカルマシンに1つの変更が設定されたままになります。この変更には、プッシュを避けたい行が含まれていません。
警告の言葉です。hgcollapseの使用には注意してください。すでに別のリポジトリにプッシュされている変更セットを折りたたまないようにする必要があります。