git-stash(1)
============

NAME
----
git-stash - Stash the changes in a dirty working directory away

SYNOPSIS
--------
[synopsis]
git stash list [<log-options>]
git stash show [-u | --include-untracked | --only-untracked] [<diff-options>] [<stash>]
git stash drop [-q | --quiet] [<stash>]
git stash pop [--index] [-q | --quiet] [<stash>]
git stash apply [--index] [-q | --quiet] [--label-ours=<label>] [--label-theirs=<label>] [--label-base=<label>] [<stash>]
git stash branch <branchname> [<stash>]
git stash [push] [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet]
	     [-u | --include-untracked] [-a | --all] [(-m | --message) <message>]
	     [--pathspec-from-file=<file> [--pathspec-file-nul]]
	     [--] [<pathspec>...]
git stash save [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet]
           [-u | --include-untracked] [-a | --all] [<message>]
git stash clear
git stash create [<message>]
git stash store [(-m | --message) <message>] [-q | --quiet] <commit>
git stash export (--print | --to-ref <ref>) [<stash>...]
git stash import <commit>

DESCRIPTION
-----------

Use `git stash` when you want to record the current state of the
working directory and the index, but want to go back to a clean
working directory.  The command saves your local modifications away
and reverts the working directory to match the `HEAD` commit.

The modifications stashed away by this command can be listed with
`git stash list`, inspected with `git stash show`, and restored
(potentially on top of a different commit) with `git stash apply`.
Calling `git stash` without any arguments is equivalent to `git stash push`.
A stash is by default listed as "WIP on '<branchname>' ...", but
you can give a more descriptive message on the command line when
you create one.

The latest stash you created is stored in `refs/stash`; older
stashes are found in the reflog of this reference and can be named using
the usual reflog syntax (e.g. `stash@{0}` is the most recently
created stash, `stash@{1}` is the one before it, `stash@{2.hours.ago}`
is also possible). Stashes may also be referenced by specifying just the
stash index (e.g. the integer `<n>` is equivalent to `stash@{<n>}`).

COMMANDS
--------

`push [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-u | --include-untracked] [ -a | --all] [-q | --quiet] [(-m|--message) <message>] [--pathspec-from-file=<file> [--pathspec-file-nul]] [--] [<pathspec>...]`::

	Save your local modifications to a new 'stash entry' and roll them
	back to `HEAD` (in the working tree and in the index).
	The _<message>_ part is optional and gives
	the description along with the stashed state.
+
For quickly making a snapshot, you can omit "push".  In this mode,
pathspec elements are only allowed after a double hyphen `--`
to prevent a misspelled subcommand from making an unwanted stash entry.

`save [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-u | --include-untracked] [-a | --all] [-q | --quiet] [<message>]`::

	This option is deprecated in favour of 'git stash push'.  It
	differs from "stash push" in that it cannot take pathspec.
	Instead, all non-option arguments are concatenated to form the stash
	message.

`list [<log-options>]`::

	List the stash entries that you currently have.  Each 'stash entry' is
	listed with its name (e.g. `stash@{0}` is the latest entry, `stash@{1}` is
	the one before, etc.), the name of the branch that was current when the
	entry was made, and a short description of the commit the entry was
	based on.
+
----------------------------------------------------------------
stash@{0}: WIP on submit: 6ebd0e2... Update git-stash documentation
stash@{1}: On master: 9cc0589... Add git-stash
----------------------------------------------------------------
+
The command takes options applicable to the 'git log'
command to control what is shown and how. See linkgit:git-log[1].

`show [-u | --include-untracked | --only-untracked] [<diff-options>] [<stash>]`::

	Show the changes recorded in the stash entry as a diff between the
	stashed contents and the commit back when the stash entry was first
	created.
	By default, the command shows the diffstat, but it will accept any
	format known to 'git diff' (e.g., `git stash show -p stash@{1}`
	to view the second most recent entry in patch form).
	If no _<diff-option>_ is provided, the default behavior will be given
	by the `stash.showStat`, and `stash.showPatch` config variables. You
	can also use `stash.showIncludeUntracked` to set whether
	`--include-untracked` is enabled by default.

`pop [--index] [-q | --quiet] [<stash>]`::

	Remove a single stashed state from the stash list and apply it
	on top of the current working tree state, i.e., do the inverse
	operation of `git stash push`. The working directory must
	match the index.
+
Applying the state can fail with conflicts; in this case, it is not
removed from the stash list. You need to resolve the conflicts by hand
and call `git stash drop` manually afterwards.

`apply [--index] [-q | --quiet] [<stash>]`::

	Like `pop`, but do not remove the state from the stash list. Unlike `pop`,
	`<stash>` may be any commit that looks like a commit created by
	`stash push` or `stash create`.

`branch <branchname> [<stash>]`::

	Creates and checks out a new branch named _<branchname>_ starting from
	the commit at which the _<stash>_ was originally created, applies the
	changes recorded in _<stash>_ to the new working tree and index.
	If that succeeds, and _<stash>_ is a reference of the form
	`stash@{<revision>}`, it then drops the _<stash>_.
+
This is useful if the branch on which you ran `git stash push` has
changed enough that `git stash apply` fails due to conflicts. Since
the stash entry is applied on top of the commit that was HEAD at the
time `git stash` was run, it restores the originally stashed state
with no conflicts.

`clear`::
	Remove all the stash entries. Note that those entries will then
	be subject to pruning, and may be impossible to recover (see
	'EXAMPLES' below for a possible strategy).

`drop [-q | --quiet] [<stash>]`::
	Remove a single stash entry from the list of stash entries.

`create`::
	Create a stash entry (which is a regular commit object) and
	return its object name, without storing it anywhere in the ref
	namespace.
	This is intended to be useful for scripts.  It is probably not
	the command you want to use; see "push" above.

`store`::

	Store a given stash created via 'git stash create' (which is a
	dangling merge commit) in the stash ref, updating the stash
	reflog.  This is intended to be useful for scripts.  It is
	probably not the command you want to use; see "push" above.

`export ( --print | --to-ref <ref> ) [<stash>...]`::

	Export the specified stashes, or all of them if none are specified, to
	a chain of commits which can be transferred using the normal fetch and
	push mechanisms, then imported using the `import` subcommand.

`import <commit>`::
	Import the specified stashes from the specified commit, which must have been
	created by `export`, and add them to the list of stashes.  To replace the
	existing stashes, use `clear` first.

OPTIONS
-------
`-a`::
`--all`::
	This option is only valid for `push` and `save` commands.
+
All ignored and untracked files are also stashed and then cleaned
up with `git clean`.

`-u`::
`--include-untracked`::
`--no-include-untracked`::
	When used with the `push` and `save` commands,
	all untracked files are also stashed and then cleaned up with
	`git clean`.
+
When used with the `show` command, show the untracked files in the stash
entry as part of the diff.

`--only-untracked`::
	This option is only valid for the `show` command.
+
Show only the untracked files in the stash entry as part of the diff.

`--index`::
	This option is only valid for `pop` and `apply` commands.
+
Tries to reinstate not only the working tree's changes, but also
the index's ones. However, this can fail, when you have conflicts
(which are stored in the index, where you therefore can no longer
apply the changes as they were originally).

`--label-ours=<label>`::
`--label-theirs=<label>`::
`--label-base=<label>`::
	These options are only valid for the `apply` command.
+
Use the given labels in conflict markers instead of the default
"Updated upstream", "Stashed changes", and "Stash base".
`--label-base` only has an effect with merge.conflictStyle=diff3.

`-k`::
`--keep-index`::
`--no-keep-index`::
	This option is only valid for `push` and `save` commands.
+
All changes already added to the index are left intact.

`-p`::
`--patch`::
	This option is only valid for `push` and `save` commands.
+
Interactively select hunks from the diff between HEAD and the
working tree to be stashed.  The stash entry is constructed such
that its index state is the same as the index state of your
repository, and its worktree contains only the changes you selected
interactively.  The selected changes are then rolled back from your
worktree. See the ``Interactive Mode'' section of linkgit:git-add[1]
to learn how to operate the `--patch` mode.
+
The `--patch` option implies `--keep-index`.  You can use
`--no-keep-index` to override this.

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

`-S`::
`--staged`::
	This option is only valid for `push` and `save` commands.
+
Stash only the changes that are currently staged. This is similar to
basic `git commit` except the state is committed to the stash instead
of current branch.
+
The `--patch` option has priority over this one.

`--pathspec-from-file=<file>`::
	This option is only valid for `push` command.
+
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`::
	This option is only valid for `push` command.
+
Only meaningful with `--pathspec-from-file`. Pathspec elements are
separated with NUL character and all other characters are taken
literally (including newlines and quotes).

`-q`::
`--quiet`::
	This option is only valid for `apply`, `drop`, `pop`, `push`,
	`save`, `store` commands.
+
Quiet, suppress feedback messages.

`--print`::
	This option is only valid for the `export` command.
+
Create the chain of commits representing the exported stashes without
storing it anywhere in the ref namespace and print the object ID to
standard output.  This is designed for scripts.

`--to-ref`::
	This option is only valid for the `export` command.
+
Create the chain of commits representing the exported stashes and store
it to the specified ref.

`--`::
	This option is only valid for `push` command.
+
Separates pathspec from options for disambiguation purposes.

`<pathspec>...`::
	This option is only valid for `push` command.
+
The new stash entry records the modified states only for the files
that match the pathspec.  The index entries and working tree files
are then rolled back to the state in HEAD only for these files,
too, leaving files that do not match the pathspec intact.
+
For more details, see the 'pathspec' entry in linkgit:gitglossary[7].

_<stash>_::
	This option is only valid for `apply`, `branch`, `drop`, `pop`,
	`show`, and `export` commands.
+
A reference of the form `stash@{<revision>}`. When no _<stash>_ is
given, the latest stash is assumed (that is, `stash@{0}`).

DISCUSSION
----------

A stash entry is represented as a commit whose tree records the state
of the working directory, and its first parent is the commit at `HEAD`
when the entry was created.  The tree of the second parent records the
state of the index when the entry is made, and it is made a child of
the `HEAD` commit.  The ancestry graph looks like this:

            .----W
           /    /
     -----H----I

where `H` is the `HEAD` commit, `I` is a commit that records the state
of the index, and `W` is a commit that records the state of the working
tree.


EXAMPLES
--------

Pulling into a dirty tree::

When you are in the middle of something, you learn that there are
upstream changes that are possibly relevant to what you are
doing.  When your local changes do not conflict with the changes in
the upstream, a simple `git pull` will let you move forward.
+
However, there are cases in which your local changes do conflict with
the upstream changes, and `git pull` refuses to overwrite your
changes.  In such a case, you can stash your changes away,
perform a pull, and then unstash, like this:
+
----------------------------------------------------------------
$ git pull
 ...
file foobar not up to date, cannot merge.
$ git stash
$ git pull
$ git stash pop
----------------------------------------------------------------

Interrupted workflow::

When you are in the middle of something, your boss comes in and
demands that you fix something immediately.  Traditionally, you would
make a commit to a temporary branch to store your changes away, and
return to your original branch to make the emergency fix, like this:
+
----------------------------------------------------------------
# ... hack hack hack ...
$ git switch -c my_wip
$ git commit -a -m "WIP"
$ git switch master
$ edit emergency fix
$ git commit -a -m "Fix in a hurry"
$ git switch my_wip
$ git reset --soft HEAD^
# ... continue hacking ...
----------------------------------------------------------------
+
You can use 'git stash' to simplify the above, like this:
+
----------------------------------------------------------------
# ... hack hack hack ...
$ git stash
$ edit emergency fix
$ git commit -a -m "Fix in a hurry"
$ git stash pop
# ... continue hacking ...
----------------------------------------------------------------

Testing partial commits::

You can use `git stash push --keep-index` when you want to make two or
more commits out of the changes in the work tree, and you want to test
each change before committing:
+
----------------------------------------------------------------
# ... hack hack hack ...
$ git add --patch foo            # add just first part to the index
$ git stash push --keep-index    # save all other changes to the stash
$ edit/build/test first part
$ git commit -m 'First part'     # commit fully tested change
$ git stash pop                  # prepare to work on all other changes
# ... repeat above five steps until one commit remains ...
$ edit/build/test remaining parts
$ git commit foo -m 'Remaining parts'
----------------------------------------------------------------

Saving unrelated changes for future use::

When you are in the middle of massive changes and you find some
unrelated issue that you don't want to forget to fix, you can do the
change(s), stage them, and use `git stash push --staged` to stash them
out for future use. This is similar to committing the staged changes,
only the commit ends-up being in the stash and not on the current branch.
+
----------------------------------------------------------------
# ... hack hack hack ...
$ git add --patch foo           # add unrelated changes to the index
$ git stash push --staged       # save these changes to the stash
# ... hack hack hack, finish current changes ...
$ git commit -m 'Massive'       # commit fully tested changes
$ git switch fixup-branch       # switch to another branch
$ git stash pop                 # to finish work on the saved changes
----------------------------------------------------------------

Recovering stash entries that were cleared/dropped erroneously::

If you mistakenly drop or clear stash entries, they cannot be recovered
through the normal safety mechanisms.  However, you can try the
following incantation to get a list of stash entries that are still in
your repository, but not reachable any more:
+
----------------------------------------------------------------
git fsck --unreachable |
grep commit | cut -d\  -f3 |
xargs git log --merges --no-walk --grep=WIP
----------------------------------------------------------------

CONFIGURATION
-------------

include::includes/cmd-config-section-all.adoc[]

:git-stash: 1
include::config/stash.adoc[]


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

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