web-dev-qa-db-ja.com

偶発的なhgストリップを元に戻しますか?

誤ってhg stripを実行し、コミットのスタックを削除しました。それ以来、レポで何もしていません。このコミットのスタックを元に戻し、実行したhgストリップを元に戻す方法はありますか?

17
ChristianCuevas

--no-backupオプションを使用してストリップを実行しなかった場合、ストリップされた変更セットは、リポジトリの.hg\strip-backupの下にあります。ディレクトリの内容を日付順に並べ替えると、最新のものを復元する必要がある可能性があります。 hg unbundle <filename>で復元してください。

25
Mark Tolonen

unbundle外部投稿から の実際の例を次に示します。もう少し一般的にするために、少しクリーンアップしました。

Mercurialを使用する場合のストリップファイルの復元

誤ってパッチを削除して、そのバックアップがない場合でも、Mercurialを使用してファイルを回復できます。ファイルを回復するには:

Microsoft Windowsコマンドプロンプトウィンドウを開きます。

ファイルを削除したプロジェクトフォルダーに移動します。

dirコマンドを実行する

Mercurialが関連するすべてのプロジェクトファイルを格納している.hgフォルダに移動します。

dirコマンドを再度実行します。

Mercurialがストリップされたパッチのバックアップバンドルを保存するストリップバックアップフォルダーに移動します。

dirコマンドを再度実行します。 <hash>-hg形式を使用する複数のファイルがディレクトリに表示されます。これらは、削除されたパッチのバックアップバンドルです。

enter image description here

エクスプローラを使用して、必要なファイルを見つけます。 Windowsエクスプローラーでstrip-backupフォルダーを開き、変更日で降順にソートします。必要なバックアップバンドルが既にわかっている場合を除いて、[最新のバンドルから開始して新しい順にバンドルを復元することをお勧めします]。

enter image description here

プロジェクトフォルダーに戻ります。

バンドルを復元するには、hg unbundle .hg\strip-backup\<bundle_file_name>を実行します。 ... PATH環境変数に追加して、グローバルにアクセスできるようにすることができます。

enter image description here

[hg pull]を使用してプロジェクトを同期し、復元されたパッチを確認します。復元されたパッチが必要なものではない場合は、必要なパッチが取得されるまで、パッチを古いものから順に復元します。

注:バックアップバンドルは、時系列を逆にする代わりに、任意の順序で復元できます。ただし、そうすることは安全ではない場合があります。復元されていない別のバックアップバンドルに依存しているバックアップバンドルを復元しようとする可能性があります。この場合、エラーが発生します。

enter image description here

1
UuDdLrLrSs

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
1
UuDdLrLrSs