偶然、CLIではなくGUIを使用して、Mercurialプロジェクトのすべてのファイルを削除しました。
Revert okで回復し、いくつかの作業を失いました。タイムマシンがあるので簡単に戻ることができました。しかし、そのようなファイルを削除/削除解除する方法はありますか?マニュアルを検索してグーグル検索したが、何も見えない。プラグインはありますか?
私はおそらくここで自分の質問に答えていますが、ファイルはディレクトリから削除されており、回復するためにゴミ箱にありませんでしたので、削除は取り消せないと仮定していますか?
追伸そんなこと知ってる hg forget
またはhg remove -Af
はディレクトリから削除せずに削除しますが、私の質問は、アクションを考え抜くのではなく、私が犯したエラーに関係しています。
まず、hg grep
回復したい削除されたファイルを見つけます。このコマンドの出力には、ファイルが存在した最後のリビジョンと、削除されたファイルへのパスが表示されます。次に、hg revert -r <revision number> <path to deleted file>
削除されたファイルは作業コピーにあり、先頭にコミットする準備ができています。
コメントからの引用:
リポジトリを設定し、すべてコミットし、削除してから再度コミットしました
この場合、作業ディレクトリを前のリビジョンに更新するだけです。
$ hg update -C -r-2
負のリビジョン番号に注意してください。削除したファイルが前のリビジョンにない場合は、次を使用してそれらを見つけることができます。
$ hg log -v
まあこれは私のために働いた。
hg revert -r revision pathToTheFile
Mercurial 1.6以上の場合
削除ファイルの名前がわかっている場合は、次のコマンドで簡単にそのリビジョンを見つけることができます。
hg log -r "removes('NAME.c')"
これにより、(ルート内の)NAME.cというファイルが削除された魔女のリビジョンが得られます。
次に、他の回答と同様に、ファイルを以前のリビジョンに戻すことができます。
hg revert -r <revision number> <path to deleted file>
代わりにファイル名パターンを使用して、知っているものに適応できます。たとえば、**/NAME.c
すべてのディレクトリを検索します。 File Name Patters でそれについて読むことができます。このリンクを使用して、新しい revset specification について確認してください。
受け入れられた答えへの追加-これは、コミットですべての削除を元に戻したい場合により高速です。数百のファイルが含まれる大きなフォルダーを削除し、hg addremove
を実行しましたが、これはまったく意図していなかったため、これらの削除をすべて元に戻す必要がありました。
Mercurialリポジトリ履歴で削除されたファイルをすぐに見つけますか? + xargs + trを使用して、すべてのリビジョン-3の削除をリビジョン-4からバージョンに戻します。
hg log -r -3 --template "{rev}: {file_dels}\n" | tr ' ' '\n' | xargs hg revert -r -4
ファイルのいずれかに名前にスペースが含まれている場合、これは失敗します。 http://hgbook.red-bean.com/read/customizing-the-output-of-Mercurial.html には、現在{file_dels}
が\n
で分割されているテンプレートはないようです。
以下の方法は簡単で、非常に馬鹿げているので間違ってはいけません。複数のファイルを削除または名前変更した場合は、問題ありません。
hg clone mydirectory mydirectory1
そして今、あなたはmc(またはFar Manager)を起動し、それが何であったかを比較します。
完了したら、mydirectory1
を削除します。
hg rollback
を使用して、リポジトリの最後のコミットを取り消すことができます。使用可能なロールバックのレベルは1つのみであるため、複数のコミットで削除を実行した場合、変更が完全に取り消されることはありません。これはローカルリポジトリでのみ機能するため、プッシュした場合、リモートリポジトリで元に戻すことはできません。
コミットされたリビジョンを削除するには、mq(Mercurial Queues)拡張機能で提供されるhg strip
コマンドを使用します。これにより、ファイルが返されます。
Mercurialの変更セットのデータベースを変更するため、それを試す前にバックアップを作成してください。
次は私のために働いた。
hg revert -r <Revision Number> <File Name>
(オプション、すべてのファイルを元に戻す)
hg revert -r <Revision Number> --all