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