Documentation / git-stash.txton commit am doc: add a pointer to relevant hooks (0e3d40c)
   1git-stash(1)
   2============
   3
   4NAME
   5----
   6git-stash - Stash the changes in a dirty working directory away
   7
   8SYNOPSIS
   9--------
  10[verse]
  11'git stash' list [<options>]
  12'git stash' show [<stash>]
  13'git stash' drop [-q|--quiet] [<stash>]
  14'git stash' ( pop | apply ) [--index] [-q|--quiet] [<stash>]
  15'git stash' branch <branchname> [<stash>]
  16'git stash' [save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]
  17             [-u|--include-untracked] [-a|--all] [<message>]]
  18'git stash' clear
  19'git stash' create [<message>]
  20'git stash' store [-m|--message <message>] [-q|--quiet] <commit>
  21
  22DESCRIPTION
  23-----------
  24
  25Use `git stash` when you want to record the current state of the
  26working directory and the index, but want to go back to a clean
  27working directory.  The command saves your local modifications away
  28and reverts the working directory to match the `HEAD` commit.
  29
  30The modifications stashed away by this command can be listed with
  31`git stash list`, inspected with `git stash show`, and restored
  32(potentially on top of a different commit) with `git stash apply`.
  33Calling `git stash` without any arguments is equivalent to `git stash save`.
  34A stash is by default listed as "WIP on 'branchname' ...", but
  35you can give a more descriptive message on the command line when
  36you create one.
  37
  38The latest stash you created is stored in `refs/stash`; older
  39stashes are found in the reflog of this reference and can be named using
  40the usual reflog syntax (e.g. `stash@{0}` is the most recently
  41created stash, `stash@{1}` is the one before it, `stash@{2.hours.ago}`
  42is also possible).
  43
  44OPTIONS
  45-------
  46
  47save [-p|--patch] [--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [<message>]::
  48
  49        Save your local modifications to a new 'stash', and run `git reset
  50        --hard` to revert them.  The <message> part is optional and gives
  51        the description along with the stashed state.  For quickly making
  52        a snapshot, you can omit _both_ "save" and <message>, but giving
  53        only <message> does not trigger this action to prevent a misspelled
  54        subcommand from making an unwanted stash.
  55+
  56If the `--keep-index` option is used, all changes already added to the
  57index are left intact.
  58+
  59If the `--include-untracked` option is used, all untracked files are also
  60stashed and then cleaned up with `git clean`, leaving the working directory
  61in a very clean state. If the `--all` option is used instead then the
  62ignored files are stashed and cleaned in addition to the untracked files.
  63+
  64With `--patch`, you can interactively select hunks from the diff
  65between HEAD and the working tree to be stashed.  The stash entry is
  66constructed such that its index state is the same as the index state
  67of your repository, and its worktree contains only the changes you
  68selected interactively.  The selected changes are then rolled back
  69from your worktree. See the ``Interactive Mode'' section of
  70linkgit:git-add[1] to learn how to operate the `--patch` mode.
  71+
  72The `--patch` option implies `--keep-index`.  You can use
  73`--no-keep-index` to override this.
  74
  75list [<options>]::
  76
  77        List the stashes that you currently have.  Each 'stash' is listed
  78        with its name (e.g. `stash@{0}` is the latest stash, `stash@{1}` is
  79        the one before, etc.), the name of the branch that was current when the
  80        stash was made, and a short description of the commit the stash was
  81        based on.
  82+
  83----------------------------------------------------------------
  84stash@{0}: WIP on submit: 6ebd0e2... Update git-stash documentation
  85stash@{1}: On master: 9cc0589... Add git-stash
  86----------------------------------------------------------------
  87+
  88The command takes options applicable to the 'git log'
  89command to control what is shown and how. See linkgit:git-log[1].
  90
  91show [<stash>]::
  92
  93        Show the changes recorded in the stash as a diff between the
  94        stashed state and its original parent. When no `<stash>` is given,
  95        shows the latest one. By default, the command shows the diffstat, but
  96        it will accept any format known to 'git diff' (e.g., `git stash show
  97        -p stash@{1}` to view the second most recent stash in patch form).
  98
  99pop [--index] [-q|--quiet] [<stash>]::
 100
 101        Remove a single stashed state from the stash list and apply it
 102        on top of the current working tree state, i.e., do the inverse
 103        operation of `git stash save`. The working directory must
 104        match the index.
 105+
 106Applying the state can fail with conflicts; in this case, it is not
 107removed from the stash list. You need to resolve the conflicts by hand
 108and call `git stash drop` manually afterwards.
 109+
 110If the `--index` option is used, then tries to reinstate not only the working
 111tree's changes, but also the index's ones. However, this can fail, when you
 112have conflicts (which are stored in the index, where you therefore can no
 113longer apply the changes as they were originally).
 114+
 115When no `<stash>` is given, `stash@{0}` is assumed, otherwise `<stash>` must
 116be a reference of the form `stash@{<revision>}`.
 117
 118apply [--index] [-q|--quiet] [<stash>]::
 119
 120        Like `pop`, but do not remove the state from the stash list. Unlike `pop`,
 121        `<stash>` may be any commit that looks like a commit created by
 122        `stash save` or `stash create`.
 123
 124branch <branchname> [<stash>]::
 125
 126        Creates and checks out a new branch named `<branchname>` starting from
 127        the commit at which the `<stash>` was originally created, applies the
 128        changes recorded in `<stash>` to the new working tree and index.
 129        If that succeeds, and `<stash>` is a reference of the form
 130        `stash@{<revision>}`, it then drops the `<stash>`. When no `<stash>`
 131        is given, applies the latest one.
 132+
 133This is useful if the branch on which you ran `git stash save` has
 134changed enough that `git stash apply` fails due to conflicts. Since
 135the stash is applied on top of the commit that was HEAD at the time
 136`git stash` was run, it restores the originally stashed state with
 137no conflicts.
 138
 139clear::
 140        Remove all the stashed states. Note that those states will then
 141        be subject to pruning, and may be impossible to recover (see
 142        'Examples' below for a possible strategy).
 143
 144drop [-q|--quiet] [<stash>]::
 145
 146        Remove a single stashed state from the stash list. When no `<stash>`
 147        is given, it removes the latest one. i.e. `stash@{0}`, otherwise
 148        `<stash>` must be a valid stash log reference of the form
 149        `stash@{<revision>}`.
 150
 151create::
 152
 153        Create a stash (which is a regular commit object) and return its
 154        object name, without storing it anywhere in the ref namespace.
 155        This is intended to be useful for scripts.  It is probably not
 156        the command you want to use; see "save" above.
 157
 158store::
 159
 160        Store a given stash created via 'git stash create' (which is a
 161        dangling merge commit) in the stash ref, updating the stash
 162        reflog.  This is intended to be useful for scripts.  It is
 163        probably not the command you want to use; see "save" above.
 164
 165DISCUSSION
 166----------
 167
 168A stash is represented as a commit whose tree records the state of the
 169working directory, and its first parent is the commit at `HEAD` when
 170the stash was created.  The tree of the second parent records the
 171state of the index when the stash is made, and it is made a child of
 172the `HEAD` commit.  The ancestry graph looks like this:
 173
 174            .----W
 175           /    /
 176     -----H----I
 177
 178where `H` is the `HEAD` commit, `I` is a commit that records the state
 179of the index, and `W` is a commit that records the state of the working
 180tree.
 181
 182
 183EXAMPLES
 184--------
 185
 186Pulling into a dirty tree::
 187
 188When you are in the middle of something, you learn that there are
 189upstream changes that are possibly relevant to what you are
 190doing.  When your local changes do not conflict with the changes in
 191the upstream, a simple `git pull` will let you move forward.
 192+
 193However, there are cases in which your local changes do conflict with
 194the upstream changes, and `git pull` refuses to overwrite your
 195changes.  In such a case, you can stash your changes away,
 196perform a pull, and then unstash, like this:
 197+
 198----------------------------------------------------------------
 199$ git pull
 200 ...
 201file foobar not up to date, cannot merge.
 202$ git stash
 203$ git pull
 204$ git stash pop
 205----------------------------------------------------------------
 206
 207Interrupted workflow::
 208
 209When you are in the middle of something, your boss comes in and
 210demands that you fix something immediately.  Traditionally, you would
 211make a commit to a temporary branch to store your changes away, and
 212return to your original branch to make the emergency fix, like this:
 213+
 214----------------------------------------------------------------
 215# ... hack hack hack ...
 216$ git checkout -b my_wip
 217$ git commit -a -m "WIP"
 218$ git checkout master
 219$ edit emergency fix
 220$ git commit -a -m "Fix in a hurry"
 221$ git checkout my_wip
 222$ git reset --soft HEAD^
 223# ... continue hacking ...
 224----------------------------------------------------------------
 225+
 226You can use 'git stash' to simplify the above, like this:
 227+
 228----------------------------------------------------------------
 229# ... hack hack hack ...
 230$ git stash
 231$ edit emergency fix
 232$ git commit -a -m "Fix in a hurry"
 233$ git stash pop
 234# ... continue hacking ...
 235----------------------------------------------------------------
 236
 237Testing partial commits::
 238
 239You can use `git stash save --keep-index` when you want to make two or
 240more commits out of the changes in the work tree, and you want to test
 241each change before committing:
 242+
 243----------------------------------------------------------------
 244# ... hack hack hack ...
 245$ git add --patch foo            # add just first part to the index
 246$ git stash save --keep-index    # save all other changes to the stash
 247$ edit/build/test first part
 248$ git commit -m 'First part'     # commit fully tested change
 249$ git stash pop                  # prepare to work on all other changes
 250# ... repeat above five steps until one commit remains ...
 251$ edit/build/test remaining parts
 252$ git commit foo -m 'Remaining parts'
 253----------------------------------------------------------------
 254
 255Recovering stashes that were cleared/dropped erroneously::
 256
 257If you mistakenly drop or clear stashes, they cannot be recovered
 258through the normal safety mechanisms.  However, you can try the
 259following incantation to get a list of stashes that are still in your
 260repository, but not reachable any more:
 261+
 262----------------------------------------------------------------
 263git fsck --unreachable |
 264grep commit | cut -d\  -f3 |
 265xargs git log --merges --no-walk --grep=WIP
 266----------------------------------------------------------------
 267
 268
 269SEE ALSO
 270--------
 271linkgit:git-checkout[1],
 272linkgit:git-commit[1],
 273linkgit:git-reflog[1],
 274linkgit:git-reset[1]
 275
 276GIT
 277---
 278Part of the linkgit:git[1] suite