git-restore

コマンド名

「git-restore」:ワークツリーファイルを復元

概要

git restore [<options>] [–source=<tree>] [–staged] [–worktree] [–] <pathspec>…
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>

指定されたツリーのコンテンツを使用し、ワークツリーファイルを復元します。ソースツリーに関連付けられているコミット、ブランチ、またはタグに名前を付けてソースツリーを指定するのが一般的となっています。

指定しない場合、--stagedが指定されている場合はHEADから、それ以外の場合はインデックスから内容が復元されます。

-p
--patch

復元ソースと復元ロケーションの違いでハンクをインタラクティブに選択します。--patchモードの操作方法についてはgit-add[1] の「インタラクティブモード」セクションを参照してください。

--patchはパススペックを受け入れることができず、変更されたすべてのパスを復元するようにすることに注意してください。

-W
--worktree
-S
--staged

復元ロケーションを指定します。どちらのオプションも指定されていない場合、デフォルトでワークツリーが復元されます。--stagedを指定すると、インデックスのみが復元されます。両方を指定すると両方が復元されます。

-q
--quiet

クワイエットにフィードバックメッセージを抑制します。--no-progressを意味します。

--progress
--no-progress

--quietが指定されていない限り、進行状況ステータスはターミナルに接続されている場合、デフォルトで標準エラーストリームにレポートされます。このフラグは--quietに関係なく、ターミナルに接続されていない場合でも進行状況のレポートを有効な状態にします。

--ours
--theirs

ワークツリー内のファイルをインデックスから復元する場合、マージされていないパスにステージ#2(「ours」)または#3(「theirs」)を使用します。

git rebasegit pull --rebaseの間、「ours」と「theirs」がスワップされているように見えるかもしれないことに注意してください。詳細についてはgit-checkout[1] の同じオプションの説明を参照してください。

-m
--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

<pathspec>がアクティブなサブモジュールを指定し、復元ロケーションにワークツリーが含まれている場合、このオプションが指定されている場合にのみサブモジュールが更新されます。この場合、そのワークツリーはスーパープロジェクトに記録されたコミットとローカルの変更に復元されます。何も使用されていない場合(または--no-recurse-submodules)、サブモジュールのワークツリーは更新されません。git-checkout[1]と同様にこれはサブモジュールのHEADを切り離します。

--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)
  1. 別のコミットからファイルを取り出します。
  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]パッケージソフトの一部

git公式ドキュメント

restore