日本語 ▾ トピック ▾ 最新バージョン ▾ git-restore は 2.50.0 で最終更新されました

名前

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 からコンテンツが復元され、それ以外の場合はインデックスから復元されます。

特別な場合として、<rev-A><rev-B> のマージベースが正確に 1 つだけ存在する場合、"<rev-A>...<rev-B>" をショートカットとして使用できます。<rev-A>_ と <rev-B> のうち最大 1 つを省略することができ、その場合、HEAD がデフォルトになります。

-p
--patch

復元元と復元場所の差分の中からハックを対話的に選択します。--patch モードの操作方法については、git-add[1] の「対話モード」セクションを参照してください。

-W
--worktree
-S
--staged

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

-q
--quiet

静かに、フィードバックメッセージを抑制します。--no-progress を暗示します。

--progress
--no-progress

ターミナルに接続されている場合、デフォルトでは標準エラー出力ストリームに進捗状況が報告されます(--quiet が指定されている場合を除く)。このフラグは、ターミナルに接続されていない場合でも、--quiet にかかわらず進捗状況の報告を有効にします。

--ours
--theirs

インデックスからワークツリーにファイルを復元する際、未マージパスにはステージ #2 (ours) または #3 (theirs) を使用します。このオプションは、ツリーイッシュからパスをチェックアウトする際には使用できません(つまり、--source オプションとは併用できません)。

git rebasegit pull --rebase の実行中、ourstheirs が入れ替わって表示される場合があることに注意してください。詳細については、git-checkout[1] の同じオプションの説明を参照してください。

-m
--merge

インデックスからワークツリーにファイルを復元する際、未マージパスで衝突したマージを再作成します。このオプションは、ツリーイッシュからパスをチェックアウトする際には使用できません(つまり、--source オプションとは併用できません)。

--conflict=<style>

上記の --merge オプションと同じですが、衝突するハックの表示方法を変更し、merge.conflictStyle 設定変数を上書きします。可能な値は merge (デフォルト)、diff3、および zdiff3 です。

--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><tree> に存在しない追跡ファイルを削除し、それらを <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]pathspecエントリを参照してください。

以下の手順で 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 .

または、top パススペックマジックを使用してすべてのワークツリーファイルを復元するには(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

git[1]スイートの一部

scroll-to-top