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