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

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

SYNOPSIS
--------
[verse]
'git-stash' (list | show [<stash>] | apply [<stash>] | clear | drop [<stash>] | pop [<stash>])
'git-stash' [save [<message>]]

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
save`.  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 `$GIT_DIR/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).

OPTIONS
-------

save [<message>]::

	Save your local modifications to a new 'stash', and run `git-reset
	--hard` to revert them.  This is the default action when no
	subcommand is given. The <message> part is optional and gives
	the description along with the stashed state.

list [<options>]::

	List the stashes that you currently have.  Each 'stash' is listed
	with its name (e.g. `stash@\{0}` is the latest stash, `stash@\{1}` is
	the one before, etc.), the name of the branch that was current when the
	stash was made, and a short description of the commit the stash 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 linkgit:git-log[1]
command to control what is shown and how.

show [<stash>]::

	Show the changes recorded in the stash as a diff between the
	stashed state and its original parent. When no `<stash>` is given,
	shows the latest one. 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 stash in patch form).

apply [--index] [<stash>]::

	Restore the changes recorded in the stash on top of the current
	working tree state.  When no `<stash>` is given, applies the latest
	one.  The working directory must match the index.
+
This operation can fail with conflicts; you need to resolve them
by hand in the working tree.
+
If the `--index` option is used, then 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).

clear::
	Remove all the stashed states. Note that those states will then
	be subject to pruning, and may be difficult or impossible to recover.

drop [<stash>]::

	Remove a single stashed state from the stash list. When no `<stash>`
	is given, it removes the latest one. i.e. `stash@\{0}`

pop [<stash>]::

	Remove a single stashed state from the stash list and apply on top
	of the current working tree state. When no `<stash>` is given,
	`stash@\{0}` is assumed. See also `apply`.


DISCUSSION
----------

A stash 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 stash was created.  The tree of the second parent records the
state of the index when the stash 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 apply
----------------------------------------------------------------

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 checkout -b my_wip
$ git commit -a -m "WIP"
$ git checkout master
$ edit emergency fix
$ git commit -a -m "Fix in a hurry"
$ git checkout 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 apply
... continue hacking ...
----------------------------------------------------------------

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

AUTHOR
------
Written by Nanako Shiraishi <nanako3@bluebottle.com>

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