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