]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-stash.txt
detached-stash: tests of git stash with stash-like arguments
[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
ca768288 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 35
cc1b8d8b 36The latest stash you created is stored in `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+
0b444cdb 80The command takes options applicable to the 'git log'
b7b10385 81command to control what is shown and how. See linkgit:git-log[1].
09ccdb63
NS
82
83show [<stash>]::
84
06ada152 85 Show the changes recorded in the stash as a diff between the
9488e875
JH
86 stashed state and its original parent. When no `<stash>` is given,
87 shows the latest one. By default, the command shows the diffstat, but
0b444cdb 88 it will accept any format known to 'git diff' (e.g., `git stash show
e2c6de1c 89 -p stash@\{1}` to view the second most recent stash in patch form).
09ccdb63 90
fcdd0e92 91pop [--index] [-q|--quiet] [<stash>]::
09ccdb63 92
d1836637
TR
93 Remove a single stashed state from the stash list and apply it
94 on top of the current working tree state, i.e., do the inverse
95 operation of `git stash save`. The working directory must
96 match the index.
9488e875 97+
d1836637
TR
98Applying the state can fail with conflicts; in this case, it is not
99removed from the stash list. You need to resolve the conflicts by hand
100and call `git stash drop` manually afterwards.
101+
0bdcac56
MV
102If the `--index` option is used, then tries to reinstate not only the working
103tree's changes, but also the index's ones. However, this can fail, when you
104have conflicts (which are stored in the index, where you therefore can no
105longer apply the changes as they were originally).
f39d6ee2
SG
106+
107When no `<stash>` is given, `stash@\{0}` is assumed.
108
fcdd0e92 109apply [--index] [-q|--quiet] [<stash>]::
f39d6ee2
SG
110
111 Like `pop`, but do not remove the state from the stash list.
09ccdb63 112
656b5034
AMS
113branch <branchname> [<stash>]::
114
115 Creates and checks out a new branch named `<branchname>` starting from
116 the commit at which the `<stash>` was originally created, applies the
117 changes recorded in `<stash>` to the new working tree and index, then
118 drops the `<stash>` if that completes successfully. When no `<stash>`
119 is given, applies the latest one.
120+
121This is useful if the branch on which you ran `git stash save` has
122changed enough that `git stash apply` fails due to conflicts. Since
123the stash is applied on top of the commit that was HEAD at the time
124`git stash` was run, it restores the originally stashed state with
125no conflicts.
126
09ccdb63 127clear::
9488e875 128 Remove all the stashed states. Note that those states will then
f5f1e164
TR
129 be subject to pruning, and may be impossible to recover (see
130 'Examples' below for a possible strategy).
09ccdb63 131
fcdd0e92 132drop [-q|--quiet] [<stash>]::
e25d5f9c
BC
133
134 Remove a single stashed state from the stash list. When no `<stash>`
135 is given, it removes the latest one. i.e. `stash@\{0}`
136
a5ab00c5
SB
137create::
138
139 Create a stash (which is a regular commit object) and return its
140 object name, without storing it anywhere in the ref namespace.
141
09ccdb63
NS
142
143DISCUSSION
144----------
145
146A stash is represented as a commit whose tree records the state of the
147working directory, and its first parent is the commit at `HEAD` when
148the stash was created. The tree of the second parent records the
149state of the index when the stash is made, and it is made a child of
150the `HEAD` commit. The ancestry graph looks like this:
151
152 .----W
153 / /
114fd812 154 -----H----I
09ccdb63
NS
155
156where `H` is the `HEAD` commit, `I` is a commit that records the state
157of the index, and `W` is a commit that records the state of the working
158tree.
159
160
161EXAMPLES
162--------
163
164Pulling into a dirty tree::
165
166When you are in the middle of something, you learn that there are
9488e875
JH
167upstream changes that are possibly relevant to what you are
168doing. When your local changes do not conflict with the changes in
09ccdb63
NS
169the upstream, a simple `git pull` will let you move forward.
170+
171However, there are cases in which your local changes do conflict with
172the upstream changes, and `git pull` refuses to overwrite your
9488e875 173changes. In such a case, you can stash your changes away,
09ccdb63
NS
174perform a pull, and then unstash, like this:
175+
176----------------------------------------------------------------
177$ git pull
9da6f0ff 178 ...
09ccdb63
NS
179file foobar not up to date, cannot merge.
180$ git stash
181$ git pull
d1836637 182$ git stash pop
09ccdb63
NS
183----------------------------------------------------------------
184
185Interrupted workflow::
186
187When you are in the middle of something, your boss comes in and
9488e875 188demands that you fix something immediately. Traditionally, you would
09ccdb63 189make a commit to a temporary branch to store your changes away, and
9488e875 190return to your original branch to make the emergency fix, like this:
09ccdb63
NS
191+
192----------------------------------------------------------------
9da6f0ff 193# ... hack hack hack ...
09ccdb63
NS
194$ git checkout -b my_wip
195$ git commit -a -m "WIP"
196$ git checkout master
197$ edit emergency fix
198$ git commit -a -m "Fix in a hurry"
199$ git checkout my_wip
200$ git reset --soft HEAD^
9da6f0ff 201# ... continue hacking ...
09ccdb63
NS
202----------------------------------------------------------------
203+
0b444cdb 204You can use 'git stash' to simplify the above, like this:
09ccdb63
NS
205+
206----------------------------------------------------------------
9da6f0ff 207# ... hack hack hack ...
09ccdb63
NS
208$ git stash
209$ edit emergency fix
210$ git commit -a -m "Fix in a hurry"
d1836637 211$ git stash pop
9da6f0ff 212# ... continue hacking ...
09ccdb63
NS
213----------------------------------------------------------------
214
7bedebca
SG
215Testing partial commits::
216
217You can use `git stash save --keep-index` when you want to make two or
218more commits out of the changes in the work tree, and you want to test
219each change before committing:
220+
221----------------------------------------------------------------
9da6f0ff 222# ... hack hack hack ...
caf18996
ER
223$ git add --patch foo # add just first part to the index
224$ git stash save --keep-index # save all other changes to the stash
225$ edit/build/test first part
f733c709 226$ git commit -m 'First part' # commit fully tested change
caf18996 227$ git stash pop # prepare to work on all other changes
9da6f0ff 228# ... repeat above five steps until one commit remains ...
caf18996
ER
229$ edit/build/test remaining parts
230$ git commit foo -m 'Remaining parts'
7bedebca
SG
231----------------------------------------------------------------
232
f5f1e164
TR
233Recovering stashes that were cleared/dropped erroneously::
234
235If you mistakenly drop or clear stashes, they cannot be recovered
236through the normal safety mechanisms. However, you can try the
237following incantation to get a list of stashes that are still in your
238repository, but not reachable any more:
239+
240----------------------------------------------------------------
241git fsck --unreachable |
242grep commit | cut -d\ -f3 |
243xargs git log --merges --no-walk --grep=WIP
244----------------------------------------------------------------
245
246
09ccdb63
NS
247SEE ALSO
248--------
5162e697
DM
249linkgit:git-checkout[1],
250linkgit:git-commit[1],
251linkgit:git-reflog[1],
252linkgit:git-reset[1]
09ccdb63
NS
253
254AUTHOR
255------
256Written by Nanako Shiraishi <nanako3@bluebottle.com>
257
258GIT
259---
9e1f0a85 260Part of the linkgit:git[1] suite