Documentation / git-restore.txton commit Merge branch 'en/merge-options-ff-and-friends' (9bc67b6)
   1git-restore(1)
   2==============
   3
   4NAME
   5----
   6git-restore - Restore working tree files
   7
   8SYNOPSIS
   9--------
  10[verse]
  11'git restore' [<options>] [--source=<tree>] [--staged] [--worktree] <pathspec>...
  12'git restore' (-p|--patch) [<options>] [--source=<tree>] [--staged] [--worktree] [<pathspec>...]
  13
  14DESCRIPTION
  15-----------
  16Restore specified paths in the working tree with some contents from a
  17restore source. If a path is tracked but does not exist in the restore
  18source, it will be removed to match the source.
  19
  20The command can also be used to restore the content in the index with
  21`--staged`, or restore both the working tree and the index with
  22`--staged --worktree`.
  23
  24By default, the restore sources for working tree and the index are the
  25index and `HEAD` respectively. `--source` could be used to specify a
  26commit as the restore source.
  27
  28See "Reset, restore and revert" in linkgit:git[1] for the differences
  29between the three commands.
  30
  31THIS COMMAND IS EXPERIMENTAL. THE BEHAVIOR MAY CHANGE.
  32
  33OPTIONS
  34-------
  35-s <tree>::
  36--source=<tree>::
  37        Restore the working tree files with the content from the given
  38        tree. It is common to specify the source tree by naming a
  39        commit, branch or tag associated with it.
  40+
  41If not specified, the default restore source for the working tree is
  42the index, and the default restore source for the index is
  43`HEAD`. When both `--staged` and `--worktree` are specified,
  44`--source` must also be specified.
  45
  46-p::
  47--patch::
  48        Interactively select hunks in the difference between the
  49        restore source and the restore location. See the ``Interactive
  50        Mode'' section of linkgit:git-add[1] to learn how to operate
  51        the `--patch` mode.
  52+
  53Note that `--patch` can accept no pathspec and will prompt to restore
  54all modified paths.
  55
  56-W::
  57--worktree::
  58-S::
  59--staged::
  60        Specify the restore location. If neither option is specified,
  61        by default the working tree is restored. Specifying `--staged`
  62        will only restore the index. Specifying both restores both.
  63
  64-q::
  65--quiet::
  66        Quiet, suppress feedback messages. Implies `--no-progress`.
  67
  68--progress::
  69--no-progress::
  70        Progress status is reported on the standard error stream
  71        by default when it is attached to a terminal, unless `--quiet`
  72        is specified. This flag enables progress reporting even if not
  73        attached to a terminal, regardless of `--quiet`.
  74
  75--ours::
  76--theirs::
  77        When restoring files in the working tree from the index, use
  78        stage #2 ('ours') or #3 ('theirs') for unmerged paths.
  79+
  80Note that during `git rebase` and `git pull --rebase`, 'ours' and
  81'theirs' may appear swapped. See the explanation of the same options
  82in linkgit:git-checkout[1] for details.
  83
  84-m::
  85--merge::
  86        When restoring files on the working tree from the index,
  87        recreate the conflicted merge in the unmerged paths.
  88
  89--conflict=<style>::
  90        The same as `--merge` option above, but changes the way the
  91        conflicting hunks are presented, overriding the
  92        `merge.conflictStyle` configuration variable.  Possible values
  93        are "merge" (default) and "diff3" (in addition to what is
  94        shown by "merge" style, shows the original contents).
  95
  96--ignore-unmerged::
  97        When restoring files on the working tree from the index, do
  98        not abort the operation if there are unmerged entries and
  99        neither `--ours`, `--theirs`, `--merge` or `--conflict` is
 100        specified. Unmerged paths on the working tree are left alone.
 101
 102--ignore-skip-worktree-bits::
 103        In sparse checkout mode, by default is to only update entries
 104        matched by `<pathspec>` and sparse patterns in
 105        $GIT_DIR/info/sparse-checkout. This option ignores the sparse
 106        patterns and unconditionally restores any files in
 107        `<pathspec>`.
 108
 109--overlay::
 110--no-overlay::
 111        In overlay mode, the command never removes files when
 112        restoring. In no-overlay mode, tracked files that do not
 113        appear in the `--source` tree are removed, to make them match
 114        `<tree>` exactly. The default is no-overlay mode.
 115
 116EXAMPLES
 117--------
 118
 119The following sequence switches to the `master` branch, reverts the
 120`Makefile` to two revisions back, deletes hello.c by mistake, and gets
 121it back from the index.
 122
 123------------
 124$ git switch master
 125$ git restore --source master~2 Makefile  <1>
 126$ rm -f hello.c
 127$ git restore hello.c                     <2>
 128------------
 129
 130<1> take a file out of another commit
 131<2> restore hello.c from the index
 132
 133If you want to restore _all_ C source files to match the version in
 134the index, you can say
 135
 136------------
 137$ git restore '*.c'
 138------------
 139
 140Note the quotes around `*.c`.  The file `hello.c` will also be
 141restored, even though it is no longer in the working tree, because the
 142file globbing is used to match entries in the index (not in the
 143working tree by the shell).
 144
 145To restore all files in the current directory
 146
 147------------
 148$ git restore .
 149------------
 150
 151or to restore all working tree files with 'top' pathspec magic (see
 152linkgit:gitglossary[7])
 153
 154------------
 155$ git restore :/
 156------------
 157
 158To restore a file in the index to match the version in `HEAD` (this is
 159the same as using linkgit:git-reset[1])
 160
 161------------
 162$ git restore --staged hello.c
 163------------
 164
 165or you can restore both the index and the working tree (this the same
 166as using linkgit:git-checkout[1])
 167
 168------------
 169$ git restore --source=HEAD --staged --worktree hello.c
 170------------
 171
 172or the short form which is more practical but less readable:
 173
 174------------
 175$ git restore -s@ -SW hello.c
 176------------
 177
 178SEE ALSO
 179--------
 180linkgit:git-checkout[1],
 181linkgit:git-reset[1]
 182
 183GIT
 184---
 185Part of the linkgit:git[1] suite