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 | drop | pop ) [<stash>] 13'git stash' apply [--index] [<stash>] 14'git stash' branch <branchname> [<stash>] 15'git stash' [save [--keep-index] [<message>]] 16'git stash' clear 17'git stash' create 18 19DESCRIPTION 20----------- 21 22Use 'git stash' when you want to record the current state of the 23working directory and the index, but want to go back to a clean 24working directory. The command saves your local modifications away 25and reverts the working directory to match the `HEAD` commit. 26 27The modifications stashed away by this command can be listed with 28`git stash list`, inspected with `git stash show`, and restored 29(potentially on top of a different commit) with `git stash apply`. 30Calling `git stash` without any arguments is equivalent to `git stash save`. 31A stash is by default listed as "WIP on 'branchname' ...", but 32you can give a more descriptive message on the command line when 33you create one. 34 35The latest stash you created is stored in `$GIT_DIR/refs/stash`; older 36stashes are found in the reflog of this reference and can be named using 37the usual reflog syntax (e.g. `stash@\{0}` is the most recently 38created stash, `stash@\{1}` is the one before it, `stash@\{2.hours.ago}` 39is also possible). 40 41OPTIONS 42------- 43 44save [--keep-index] [<message>]:: 45 46 Save your local modifications to a new 'stash', and run `git reset 47 --hard` to revert them. This is the default action when no 48 subcommand is given. The <message> part is optional and gives 49 the description along with the stashed state. 50+ 51If the `--keep-index` option is used, all changes already added to the 52index are left intact. 53 54list [<options>]:: 55 56 List the stashes that you currently have. Each 'stash' is listed 57 with its name (e.g. `stash@\{0}` is the latest stash, `stash@\{1}` is 58 the one before, etc.), the name of the branch that was current when the 59 stash was made, and a short description of the commit the stash was 60 based on. 61+ 62---------------------------------------------------------------- 63stash@{0}: WIP on submit: 6ebd0e2... Update git-stash documentation 64stash@{1}: On master: 9cc0589... Add git-stash 65---------------------------------------------------------------- 66+ 67The command takes options applicable to the 'git-log' 68command to control what is shown and how. See linkgit:git-log[1]. 69 70show [<stash>]:: 71 72 Show the changes recorded in the stash as a diff between the 73 stashed state and its original parent. When no `<stash>` is given, 74 shows the latest one. By default, the command shows the diffstat, but 75 it will accept any format known to 'git-diff' (e.g., `git stash show 76 -p stash@\{1}` to view the second most recent stash in patch form). 77 78pop [<stash>]:: 79 80 Remove a single stashed state from the stash list and apply it 81 on top of the current working tree state, i.e., do the inverse 82 operation of `git stash save`. The working directory must 83 match the index. 84+ 85Applying the state can fail with conflicts; in this case, it is not 86removed from the stash list. You need to resolve the conflicts by hand 87and call `git stash drop` manually afterwards. 88+ 89When no `<stash>` is given, `stash@\{0}` is assumed. See also `apply`. 90 91apply [--index] [<stash>]:: 92 93 Like `pop`, but do not remove the state from the stash list. 94+ 95If the `--index` option is used, then tries to reinstate not only the working 96tree's changes, but also the index's ones. However, this can fail, when you 97have conflicts (which are stored in the index, where you therefore can no 98longer apply the changes as they were originally). 99 100branch <branchname> [<stash>]:: 101 102 Creates and checks out a new branch named `<branchname>` starting from 103 the commit at which the `<stash>` was originally created, applies the 104 changes recorded in `<stash>` to the new working tree and index, then 105 drops the `<stash>` if that completes successfully. When no `<stash>` 106 is given, applies the latest one. 107+ 108This is useful if the branch on which you ran `git stash save` has 109changed enough that `git stash apply` fails due to conflicts. Since 110the stash is applied on top of the commit that was HEAD at the time 111`git stash` was run, it restores the originally stashed state with 112no conflicts. 113 114clear:: 115 Remove all the stashed states. Note that those states will then 116 be subject to pruning, and may be difficult or impossible to recover. 117 118drop [<stash>]:: 119 120 Remove a single stashed state from the stash list. When no `<stash>` 121 is given, it removes the latest one. i.e. `stash@\{0}` 122 123create:: 124 125 Create a stash (which is a regular commit object) and return its 126 object name, without storing it anywhere in the ref namespace. 127 128 129DISCUSSION 130---------- 131 132A stash is represented as a commit whose tree records the state of the 133working directory, and its first parent is the commit at `HEAD` when 134the stash was created. The tree of the second parent records the 135state of the index when the stash is made, and it is made a child of 136the `HEAD` commit. The ancestry graph looks like this: 137 138 .----W 139 / / 140 -----H----I 141 142where `H` is the `HEAD` commit, `I` is a commit that records the state 143of the index, and `W` is a commit that records the state of the working 144tree. 145 146 147EXAMPLES 148-------- 149 150Pulling into a dirty tree:: 151 152When you are in the middle of something, you learn that there are 153upstream changes that are possibly relevant to what you are 154doing. When your local changes do not conflict with the changes in 155the upstream, a simple `git pull` will let you move forward. 156+ 157However, there are cases in which your local changes do conflict with 158the upstream changes, and `git pull` refuses to overwrite your 159changes. In such a case, you can stash your changes away, 160perform a pull, and then unstash, like this: 161+ 162---------------------------------------------------------------- 163$ git pull 164 ... 165file foobar not up to date, cannot merge. 166$ git stash 167$ git pull 168$ git stash pop 169---------------------------------------------------------------- 170 171Interrupted workflow:: 172 173When you are in the middle of something, your boss comes in and 174demands that you fix something immediately. Traditionally, you would 175make a commit to a temporary branch to store your changes away, and 176return to your original branch to make the emergency fix, like this: 177+ 178---------------------------------------------------------------- 179# ... hack hack hack ... 180$ git checkout -b my_wip 181$ git commit -a -m "WIP" 182$ git checkout master 183$ edit emergency fix 184$ git commit -a -m "Fix in a hurry" 185$ git checkout my_wip 186$ git reset --soft HEAD^ 187# ... continue hacking ... 188---------------------------------------------------------------- 189+ 190You can use 'git-stash' to simplify the above, like this: 191+ 192---------------------------------------------------------------- 193# ... hack hack hack ... 194$ git stash 195$ edit emergency fix 196$ git commit -a -m "Fix in a hurry" 197$ git stash pop 198# ... continue hacking ... 199---------------------------------------------------------------- 200 201Testing partial commits:: 202 203You can use `git stash save --keep-index` when you want to make two or 204more commits out of the changes in the work tree, and you want to test 205each change before committing: 206+ 207---------------------------------------------------------------- 208# ... hack hack hack ... 209$ git add --patch foo # add just first part to the index 210$ git stash save --keep-index # save all other changes to the stash 211$ edit/build/test first part 212$ git commit -m 'First part' # commit fully tested change 213$ git stash pop # prepare to work on all other changes 214# ... repeat above five steps until one commit remains ... 215$ edit/build/test remaining parts 216$ git commit foo -m 'Remaining parts' 217---------------------------------------------------------------- 218 219SEE ALSO 220-------- 221linkgit:git-checkout[1], 222linkgit:git-commit[1], 223linkgit:git-reflog[1], 224linkgit:git-reset[1] 225 226AUTHOR 227------ 228Written by Nanako Shiraishi <nanako3@bluebottle.com> 229 230GIT 231--- 232Part of the linkgit:git[1] suite