誤ってhg stripを実行し、コミットのスタックを削除しました。それ以来、レポで何もしていません。このコミットのスタックを元に戻し、実行したhgストリップを元に戻す方法はありますか?
--no-backup
オプションを使用してストリップを実行しなかった場合、ストリップされた変更セットは、リポジトリの.hg\strip-backup
の下にあります。ディレクトリの内容を日付順に並べ替えると、最新のものを復元する必要がある可能性があります。 hg unbundle <filename>
で復元してください。
unbundle
外部投稿から の実際の例を次に示します。もう少し一般的にするために、少しクリーンアップしました。
Mercurialを使用する場合のストリップファイルの復元
誤ってパッチを削除して、そのバックアップがない場合でも、Mercurialを使用してファイルを回復できます。ファイルを回復するには:
Microsoft Windowsコマンドプロンプトウィンドウを開きます。
ファイルを削除したプロジェクトフォルダーに移動します。
dir
コマンドを実行するMercurialが関連するすべてのプロジェクトファイルを格納している
.hg
フォルダに移動します。
dir
コマンドを再度実行します。Mercurialがストリップされたパッチのバックアップバンドルを保存するストリップバックアップフォルダーに移動します。
dir
コマンドを再度実行します。<hash>-hg
形式を使用する複数のファイルがディレクトリに表示されます。これらは、削除されたパッチのバックアップバンドルです。エクスプローラを使用して、必要なファイルを見つけます。 Windowsエクスプローラーで
strip-backup
フォルダーを開き、変更日で降順にソートします。必要なバックアップバンドルが既にわかっている場合を除いて、[最新のバンドルから開始して新しい順にバンドルを復元することをお勧めします]。プロジェクトフォルダーに戻ります。
バンドルを復元するには、
hg unbundle .hg\strip-backup\<bundle_file_name>
を実行します。 ...PATH
環境変数に追加して、グローバルにアクセスできるようにすることができます。[
hg pull
]を使用してプロジェクトを同期し、復元されたパッチを確認します。復元されたパッチが必要なものではない場合は、必要なパッチが取得されるまで、パッチを古いものから順に復元します。注:バックアップバンドルは、時系列を逆にする代わりに、任意の順序で復元できます。ただし、そうすることは安全ではない場合があります。復元されていない別のバックアップバンドルに依存しているバックアップバンドルを復元しようとする可能性があります。この場合、エラーが発生します。
hg pull
を使用する代わりに、ストリップバックアップファイルからhg unbundle
を使用することができます。
この質問に対する別の回答のコメントで述べたように、hg unbundle
はオプションが少なく、バンドルでのみ機能しますが、一度に複数のバンドルをバンドル解除できます。一方、hg pull
は単一のソース(share/web/bundle)からプルでき、他のオプションがあります。
Isaac Juradoによる 外部投稿 に基づくhg pull
の使用例を次に示します。
通常、バックアップは
REPO/.hg/strip-backup/
に配置されます。以下の例をご覧ください。$ hg glog @ changeset: 2:d9f98bd00d5b tip | three o changeset: 1:e1634a4bde50 | two o changeset: 0:eb14457d75fa one $ hg strip 1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved saved backup bundle to /Users/hchapman/ttt/.hg/strip-backup/e1634a4bde50-backup.hg
そして、それらのチェンジセットを回復するために何をするでしょう:
$ hg pull $(hg root)/.hg/strip-backup/e1634a4bde50-backup.hg