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