git checkout <hash> <directory>
リポジトリ内のディレクトリの以前のリビジョンをチェックアウトするために使用しようとしています。これは、ディレクトリ内のファイルを以前の状態に復元するために機能します。唯一の問題は、チェックアウトしたリビジョン以降に追加されたサブディレクトリが消えないことです。
たとえば、私のディレクトリ構造が次の場合:
HEAD:
thing/dir1/
thing/dir2/
HEAD^:
thing/dir1/
そうするとgit checkout <hash>
、切り離されたHEADモードになり、すべてが正常に一致します。代わりに私がそうするgit checkout <hash> thing/
と、の内容thing/dir1/
は元に戻りますが、そのthing/dir2/
ままになります。
実行するとgit status
、からのファイル変更が表示されますthing/dir1/
が、は言及されていませんthing/dir2/
。これは奇妙なことです。なぜなら、HEAD ^のコンテキストでは、thing/dir2/
存在すべきではなく、したがって消滅するはずだからです。 git clean
追跡されていないものとして表示されないため、役に立ちません。
作業ツリー全体をチェックアウトすることなく、完全に一致するディレクトリの以前のリビジョンをチェックアウトする方法はありますか?
アップデート:
これが機能するように見えます:
git reset <hash> thing/
git checkout <hash> thing/
git clean -fd thing/
これにより、作業ツリーとインデックスが奇妙な状態になりますが、目的の効果が得られます。