英語 ▾ トピック ▾ 最新バージョン ▾ git-restore は 2.49.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] の「Reset, restore and revert」を参照してください。

このコマンドは実験的です。動作が変更される可能性があります。

オプション

-s <tree>
--source=<tree>

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

指定されない場合、--staged が与えられれば内容は HEAD から復元され、そうでなければインデックスから復元されます。

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

-p
--patch

復元元と復元場所の差分からインタラクティブにハンクを選択します。--patch モードの操作方法については、git-add[1] の「Interactive Mode」セクションを参照してください。

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

-W
--worktree
-S
--staged

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

-q
--quiet

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

--progress
--no-progress

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

--ours
--theirs

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

git rebase および git 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