コマンド名
「git-restore」:ワークツリーファイルを復元
概要
git restore [<options>] [–source=<tree>] [–staged] [–worktree] –pathspec-from-file=<file> [–pathspec-file-nul]
git restore (-p|–patch) [<options>] [–source=<tree>] [–staged] [–worktree] [–] [<pathspec>…]
説明
復元ソースからのコンテンツを使用し、ワークツリー内の指定されたパスを復元します。パスが追跡されている状態で、復元ソースに存在しない場合、ソースと一致するように削除されます。
このコマンドを使用し、--staged
を使用してインデックスのコンテンツを復元したり、--staged --worktree
を使用してワークツリーとインデックスの両方を復元することもできます。
デフォルトで--staged
が指定されている場合、コンテンツはHEADから復元され、それ以外の場合はインデックスから復元されます。別のコミットから復元するためには--source
を使用します。
3つのコマンドの違いについてはgit[1] の「リセット、復元、および元に戻す」を参照してください。
このコマンドは実験的なものであり、動作は変更になる可能性があります。
オプション
-s <tree>
--source=<tree>
--source=<tree>
指定されたツリーのコンテンツを使用し、ワークツリーファイルを復元します。ソースツリーに関連付けられているコミット、ブランチ、またはタグに名前を付けてソースツリーを指定するのが一般的となっています。
指定しない場合、--staged
が指定されている場合はHEAD
から、それ以外の場合はインデックスから内容が復元されます。
-p
--patch
--patch
復元ソースと復元ロケーションの違いでハンクをインタラクティブに選択します。--patch
モードの操作方法についてはgit-add[1] の「インタラクティブモード」セクションを参照してください。
--patch
はパススペックを受け入れることができず、変更されたすべてのパスを復元するようにすることに注意してください。
-W
--worktree
-S
--staged
--worktree
-S
--staged
復元ロケーションを指定します。どちらのオプションも指定されていない場合、デフォルトでワークツリーが復元されます。--staged
を指定すると、インデックスのみが復元されます。両方を指定すると両方が復元されます。
-q
--quiet
--quiet
クワイエットにフィードバックメッセージを抑制します。--no-progress
を意味します。
--progress
--no-progress
--no-progress
--quiet
が指定されていない限り、進行状況ステータスはターミナルに接続されている場合、デフォルトで標準エラーストリームにレポートされます。このフラグは--quiet
に関係なく、ターミナルに接続されていない場合でも進行状況のレポートを有効な状態にします。
--ours
--theirs
--theirs
ワークツリー内のファイルをインデックスから復元する場合、マージされていないパスにステージ#2(「ours」)または#3(「theirs」)を使用します。
git rebase
とgit pull --rebase
の間、「ours」と「theirs」がスワップされているように見えるかもしれないことに注意してください。詳細についてはgit-checkout[1] の同じオプションの説明を参照してください。
-m
--merge
--merge
ワークツリー上のファイルをインデックスから復元する場合、マージされていないパスでコンフリクトするマージを再作成します。
--conflict=<style>
上記の--merge
オプションと同じですが、コンフリクトするハンクの表示方法を変更し、merge.conflictStyle
構成変数を上書きします。可能な値としては「merge」(デフォルト)と「diff3」となっています(「merge」スタイルで表示されるものに加えて、オリジナルコンテンツを表示します)。
--ignore-unmerged
ワークツリー上のファイルをインデックスから復元する時、マージされていないエントリがあり、--ours
、--theirs
、--merge
、--conflict
のいずれも指定されていない場合、操作を中止しません。ワークツリー上のマージされていないパスはそのままになります。
--ignore-skip-worktree-bits
スパースチェックアウトモードにおいて、デフォルトでは<pathspec>
と一致するエントリと「$ GIT_DIR / info / sparse-checkout」のスパースパターンのみが更新されます。このオプションはスパースパターンを無視し、<pathspec>
内のすべてのファイルを無条件に復元します。
--recurse-submodules
--no-recurse-submodules
--no-recurse-submodules
<pathspec>
がアクティブなサブモジュールを指定し、復元ロケーションにワークツリーが含まれている場合、このオプションが指定されている場合にのみサブモジュールが更新されます。この場合、そのワークツリーはスーパープロジェクトに記録されたコミットとローカルの変更に復元されます。何も使用されていない場合(または--no-recurse-submodules
)、サブモジュールのワークツリーは更新されません。git-checkout[1]と同様にこれはサブモジュールのHEAD
を切り離します。
--overlay
--no-overlay
--no-overlay
オーバーレイモードではコマンドは復元時にファイルを削除しません。オーバーレイがないモードでは--source
ツリーに表示されない追跡ファイルが削除され、<tree>
と完全に一致するようになります。デフォルトはオーバーレイがないモードです。
--pathspec-from-file=<file>
パススペックはコマンドライン引数の代わりに<file>
でパスされます。<file>
が正確に-
の場合、標準入力が使用されます。パススペック要素はLFまたはCR/LFで区切られます。パススペック要素は構成変数core.quotePath
で説明されているように引用できます(git-config[1]を参照--pathspec-file-nul
およびグローバル--literal-pathspecs
も参照します。
--pathspec-file-nul
--pathspec-from-file
でのみ意味があります。パススペック要素はNUL文字で区切られ、他のすべての文字は文字通りに解釈されます(改行と引用符を含む)。
--
これ以上の引数をオプションとして解釈しません。
<pathspec>…
操作の影響を受けるパスを制限します。
詳細についてはgitglossary[7]のパススペックエントリを参照してください。
例
次のシーケンスはmaster
ブランチに切り替わり、Makefile
を2つのリビジョンに戻し、誤って「hello.c」を削除し、インデックスから取得します。
$ git switch master $ git restore --source master~2 Makefile (1) $ rm -f hello.c $ git restore hello.c (2)
- 別のコミットからファイルを取り出します。
- インデックスからhello.cを復元します。
インデックス内のバージョンと一致するようにすべてのCソースファイルを復元する場合、次のようになります。
$ git restore '*.c'
*.c
の前後の引用符に注意してください。ファイルhello.c
はワークツリーに存在しなくなった場合でも復元されます。これはファイルグロブがインデックス内のエントリを照合するために使用されるためです(シェルによるワークツリー内ではありません)。
現在のディレクトリ内のすべてのファイルを復元するには次のようにします。
$ git restore .
またはトップパススペックマジックを使用してすべてのワークツリーファイルを復元します(gitglossary[7]を参照)。
$ git restore :/
HEAD
のバージョンと一致するようにインデックス内のファイルを復元するには次のようにします(これはgit-reset[1]を使用するのと同じです)。
$ git restore --staged hello.c
またはインデックスとワークツリーの両方を復元できます(これはgit-checkout[1]を使用するのと同じです)。
$ git restore --source=HEAD --staged --worktree hello.c
またはより実用的で読みにくいショートフォームは次のようにします。
$ git restore -s@ -SW hello.c
参照
git-checkout[1]、git-reset[1]
GIT
git[1]パッケージソフトの一部