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' (save | list | show [<stash>] | apply [<stash>] | clear) 12 13DESCRIPTION 14----------- 15 16Use 'git-stash save' when you want to record the current state of the 17working directory and the index, but want to go back to a clean 18working directory. The command saves your local modifications away 19and reverts the working directory to match the `HEAD` commit. 20 21The modifications stashed away by this command can be listed with 22`git-stash list`, inspected with `git-stash show`, and restored 23(potentially on top of a different commit) with `git-stash apply`. 24Calling git-stash without any arguments is equivalent to `git-stash 25list`. 26 27The latest stash you created is stored in `$GIT_DIR/refs/stash`; older 28stashes are found in the reflog of this reference and can be named using 29the usual reflog syntax (e.g. `stash@\{1}` is the most recently 30created stash, `stash@\{2}` is the one before it, `stash@\{2.hours.ago}` 31is also possible). 32 33OPTIONS 34------- 35 36save:: 37 38 Save your local modifications to a new 'stash', and run `git-reset 39 --hard` to revert them. 40 41list:: 42 43 List the stashes that you currently have. Each 'stash' is listed 44 with its name (e.g. `stash@\{0}` is the latest stash, `stash@\{1} is 45 the one before, etc.), the name of the branch that was current when the 46 stash was made, and a short description of the commit the stash was 47 based on. 48+ 49---------------------------------------------------------------- 50stash@{0}: submit: 6ebd0e2... Add git-stash 51stash@{1}: master: 9cc0589... Merge branch 'master' of gfi 52---------------------------------------------------------------- 53 54show [<stash>]:: 55 56 Show the changes recorded in the stash as a diff between the the 57 stashed state and its original parent. When no `<stash>` is given, 58 shows the latest one. By default, the command shows the diffstat, but 59 it will accept any format known to `git-diff` (e.g., `git-stash show 60 -p stash@\{2}` to view the second most recent stash in patch form). 61 62apply [<stash>]:: 63 64 Restore the changes recorded in the stash on top of the current 65 working tree state. When no `<stash>` is given, applies the latest 66 one. The working directory must match the index. 67+ 68This operation can fail with conflicts; you need to resolve them 69by hand in the working tree. 70 71clear:: 72 Remove all the stashed states. Note that those states will then 73 be subject to pruning, and may be difficult or impossible to recover. 74 75 76DISCUSSION 77---------- 78 79A stash is represented as a commit whose tree records the state of the 80working directory, and its first parent is the commit at `HEAD` when 81the stash was created. The tree of the second parent records the 82state of the index when the stash is made, and it is made a child of 83the `HEAD` commit. The ancestry graph looks like this: 84 85 .----W 86 / / 87 ...--H----I 88 89where `H` is the `HEAD` commit, `I` is a commit that records the state 90of the index, and `W` is a commit that records the state of the working 91tree. 92 93 94EXAMPLES 95-------- 96 97Pulling into a dirty tree:: 98 99When you are in the middle of something, you learn that there are 100upstream changes that are possibly relevant to what you are 101doing. When your local changes do not conflict with the changes in 102the upstream, a simple `git pull` will let you move forward. 103+ 104However, there are cases in which your local changes do conflict with 105the upstream changes, and `git pull` refuses to overwrite your 106changes. In such a case, you can stash your changes away, 107perform a pull, and then unstash, like this: 108+ 109---------------------------------------------------------------- 110$ git pull 111... 112file foobar not up to date, cannot merge. 113$ git stash 114$ git pull 115$ git stash apply 116---------------------------------------------------------------- 117 118Interrupted workflow:: 119 120When you are in the middle of something, your boss comes in and 121demands that you fix something immediately. Traditionally, you would 122make a commit to a temporary branch to store your changes away, and 123return to your original branch to make the emergency fix, like this: 124+ 125---------------------------------------------------------------- 126... hack hack hack ... 127$ git checkout -b my_wip 128$ git commit -a -m "WIP" 129$ git checkout master 130$ edit emergency fix 131$ git commit -a -m "Fix in a hurry" 132$ git checkout my_wip 133$ git reset --soft HEAD^ 134... continue hacking ... 135---------------------------------------------------------------- 136+ 137You can use `git-stash` to simplify the above, like this: 138+ 139---------------------------------------------------------------- 140... hack hack hack ... 141$ git stash 142$ edit emergency fix 143$ git commit -a -m "Fix in a hurry" 144$ git stash apply 145... continue hacking ... 146---------------------------------------------------------------- 147 148SEE ALSO 149-------- 150gitlink:git-checkout[1], 151gitlink:git-commit[1], 152gitlink:git-reflog[1], 153gitlink:git-reset[1] 154 155AUTHOR 156------ 157Written by Nanako Shiraishi <nanako3@bluebottle.com> 158 159GIT 160--- 161Part of the gitlink:git[7] suite