git-restore(1)
==============

NAME
----
git-restore - Restore working tree files

SYNOPSIS
--------
[synopsis]
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>...]

DESCRIPTION
-----------
Restore specified paths in the working tree with some contents from a
restore source. If a path is tracked but does not exist in the restore
source, it will be removed to match the source.

The command can also be used to restore the content in the index with
`--staged`, or restore both the working tree and the index with
`--staged --worktree`.

By default, if `--staged` is given, the contents are restored from `HEAD`,
otherwise from the index. Use `--source` to restore from a different commit.

See "Reset, restore and revert" in linkgit:git[1] for the differences
between the three commands.

OPTIONS
-------
`-s <tree>`::
`--source=<tree>`::
	Restore the working tree files with the content from the given
	tree. It is common to specify the source tree by naming a
	commit, branch or tag associated with it.
+
If not specified, the contents are restored from `HEAD` if `--staged` is
given, otherwise from the index.
+
As a special case, you may use `"<rev-A>...<rev-B>"` as a shortcut for the
merge base of _<rev-A>_ and _<rev-B>_ if there is exactly one merge base. You can
leave out at most one of _<rev-A>_ and _<rev-B>_, in which case it defaults to `HEAD`.

`-p`::
`--patch`::
	Interactively select hunks in the difference between the
	restore source and the restore location. See the "Interactive
	Mode" section of linkgit:git-add[1] to learn how to operate
	the `--patch` mode.

include::diff-context-options.adoc[]

`-W`::
`--worktree`::
`-S`::
`--staged`::
	Specify the restore location. If neither option is specified,
	by default the working tree is restored. Specifying `--staged`
	will only restore the index. Specifying both restores both.

`-q`::
`--quiet`::
	Quiet, suppress feedback messages. Implies `--no-progress`.

`--progress`::
`--no-progress`::
	Progress status is reported on the standard error stream
	by default when it is attached to a terminal, unless `--quiet`
	is specified. This flag enables progress reporting even if not
	attached to a terminal, regardless of `--quiet`.

`--ours`::
`--theirs`::
	When restoring files in the working tree from the index, use
	stage #2 (`ours`) or #3 (`theirs`) for unmerged paths.
	This option cannot be used when checking out paths from a
	tree-ish (i.e. with the `--source` option).
+
Note that during `git rebase` and `git pull --rebase`, `ours` and
`theirs` may appear swapped. See the explanation of the same options
in linkgit:git-checkout[1] for details.

`-m`::
`--merge`::
	When restoring files on the working tree from the index,
	recreate the conflicted merge in the unmerged paths.
	This option cannot be used when checking out paths from a
	tree-ish (i.e. with the `--source` option).

`--conflict=<style>`::
	The same as `--merge` option above, but changes the way the
	conflicting hunks are presented, overriding the
	`merge.conflictStyle` configuration variable.  Possible values
	are `merge` (default), `diff3`, and `zdiff3`.

`--ignore-unmerged`::
	When restoring files on the working tree from the index, do
	not abort the operation if there are unmerged entries and
	neither `--ours`, `--theirs`, `--merge` or `--conflict` is
	specified. Unmerged paths on the working tree are left alone.

`--ignore-skip-worktree-bits`::
	In sparse checkout mode, the default is to only update entries
	matched by _<pathspec>_ and sparse patterns in
	`$GIT_DIR/info/sparse-checkout`. This option ignores the sparse
	patterns and unconditionally restores any files in
	_<pathspec>_.

`--recurse-submodules`::
`--no-recurse-submodules`::
	If _<pathspec>_ names an active submodule and the restore location
	includes the working tree, the submodule will only be updated if
	this option is given, in which case its working tree will be
	restored to the commit recorded in the superproject, and any local
	modifications overwritten. If nothing (or
	`--no-recurse-submodules`) is used, submodules working trees will
	not be updated. Just like linkgit:git-checkout[1], this will detach
	`HEAD` of the submodule.

`--overlay`::
`--no-overlay`::
	In overlay mode, never remove files when restoring. In no-overlay mode,
	remove tracked files that do not appear in the _<tree>_ of
	`--source=<tree>`, to make them match _<tree>_ exactly. The default
	is no-overlay mode.

`--pathspec-from-file=<file>`::
	Pathspec is passed in _<file>_ instead of commandline args. If
	_<file>_ is exactly `-` then standard input is used. Pathspec
	elements are separated by _LF_ or _CR_/_LF_. Pathspec elements can be
	quoted as explained for the configuration variable `core.quotePath`
	(see linkgit:git-config[1]). See also `--pathspec-file-nul` and
	global `--literal-pathspecs`.

`--pathspec-file-nul`::
	Only meaningful with `--pathspec-from-file`. Pathspec elements are
	separated with _NUL_ character and all other characters are taken
	literally (including newlines and quotes).

`--`::
	Do not interpret any more arguments as options.

`<pathspec>...`::
	Limits the paths affected by the operation.
+
For more details, see the 'pathspec' entry in linkgit:gitglossary[7].

EXAMPLES
--------

The following sequence switches to the `master` branch, reverts the
`Makefile` to two revisions back, deletes `hello.c` by mistake, and gets
it back from the index.

------------
$ git switch master
$ git restore --source master~2 Makefile  <1>
$ rm -f hello.c
$ git restore hello.c                     <2>
------------

<1> take a file out of another commit
<2> restore `hello.c` from the index

If you want to restore _all_ C source files to match the version in
the index, you can say

------------
$ git restore '*.c'
------------

Note the quotes around `*.c`.  The file `hello.c` will also be
restored, even though it is no longer in the working tree, because the
file globbing is used to match entries in the index (not in the
working tree by the shell).

To restore all files in the current directory

------------
$ git restore .
------------

or to restore all working tree files with 'top' pathspec magic (see
linkgit:gitglossary[7])

------------
$ git restore :/
------------

To restore a file in the index to match the version in `HEAD` (this is
the same as using linkgit:git-reset[1])

------------
$ git restore --staged hello.c
------------

or you can restore both the index and the working tree (this is the same
as using linkgit:git-checkout[1])

------------
$ git restore --source=HEAD --staged --worktree hello.c
------------

or the short form which is more practical but less readable:

------------
$ git restore -s@ -SW hello.c
------------

SEE ALSO
--------
linkgit:git-checkout[1],
linkgit:git-reset[1]

GIT
---
Part of the linkgit:git[1] suite
