]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-stash.txt
t/Makefile: include config.mak
[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
JH
116 Remove all the stashed states. Note that those states will then
117 be subject to pruning, and may be difficult or impossible to recover.
09ccdb63 118
fcdd0e92 119drop [-q|--quiet] [<stash>]::
e25d5f9c
BC
120
121 Remove a single stashed state from the stash list. When no `<stash>`
122 is given, it removes the latest one. i.e. `stash@\{0}`
123
a5ab00c5
SB
124create::
125
126 Create a stash (which is a regular commit object) and return its
127 object name, without storing it anywhere in the ref namespace.
128
09ccdb63
NS
129
130DISCUSSION
131----------
132
133A stash is represented as a commit whose tree records the state of the
134working directory, and its first parent is the commit at `HEAD` when
135the stash was created. The tree of the second parent records the
136state of the index when the stash is made, and it is made a child of
137the `HEAD` commit. The ancestry graph looks like this:
138
139 .----W
140 / /
114fd812 141 -----H----I
09ccdb63
NS
142
143where `H` is the `HEAD` commit, `I` is a commit that records the state
144of the index, and `W` is a commit that records the state of the working
145tree.
146
147
148EXAMPLES
149--------
150
151Pulling into a dirty tree::
152
153When you are in the middle of something, you learn that there are
9488e875
JH
154upstream changes that are possibly relevant to what you are
155doing. When your local changes do not conflict with the changes in
09ccdb63
NS
156the upstream, a simple `git pull` will let you move forward.
157+
158However, there are cases in which your local changes do conflict with
159the upstream changes, and `git pull` refuses to overwrite your
9488e875 160changes. In such a case, you can stash your changes away,
09ccdb63
NS
161perform a pull, and then unstash, like this:
162+
163----------------------------------------------------------------
164$ git pull
9da6f0ff 165 ...
09ccdb63
NS
166file foobar not up to date, cannot merge.
167$ git stash
168$ git pull
d1836637 169$ git stash pop
09ccdb63
NS
170----------------------------------------------------------------
171
172Interrupted workflow::
173
174When you are in the middle of something, your boss comes in and
9488e875 175demands that you fix something immediately. Traditionally, you would
09ccdb63 176make a commit to a temporary branch to store your changes away, and
9488e875 177return to your original branch to make the emergency fix, like this:
09ccdb63
NS
178+
179----------------------------------------------------------------
9da6f0ff 180# ... hack hack hack ...
09ccdb63
NS
181$ git checkout -b my_wip
182$ git commit -a -m "WIP"
183$ git checkout master
184$ edit emergency fix
185$ git commit -a -m "Fix in a hurry"
186$ git checkout my_wip
187$ git reset --soft HEAD^
9da6f0ff 188# ... continue hacking ...
09ccdb63
NS
189----------------------------------------------------------------
190+
ba020ef5 191You can use 'git-stash' to simplify the above, like this:
09ccdb63
NS
192+
193----------------------------------------------------------------
9da6f0ff 194# ... hack hack hack ...
09ccdb63
NS
195$ git stash
196$ edit emergency fix
197$ git commit -a -m "Fix in a hurry"
d1836637 198$ git stash pop
9da6f0ff 199# ... continue hacking ...
09ccdb63
NS
200----------------------------------------------------------------
201
7bedebca
SG
202Testing partial commits::
203
204You can use `git stash save --keep-index` when you want to make two or
205more commits out of the changes in the work tree, and you want to test
206each change before committing:
207+
208----------------------------------------------------------------
9da6f0ff 209# ... hack hack hack ...
caf18996
ER
210$ git add --patch foo # add just first part to the index
211$ git stash save --keep-index # save all other changes to the stash
212$ edit/build/test first part
f733c709 213$ git commit -m 'First part' # commit fully tested change
caf18996 214$ git stash pop # prepare to work on all other changes
9da6f0ff 215# ... repeat above five steps until one commit remains ...
caf18996
ER
216$ edit/build/test remaining parts
217$ git commit foo -m 'Remaining parts'
7bedebca
SG
218----------------------------------------------------------------
219
09ccdb63
NS
220SEE ALSO
221--------
5162e697
DM
222linkgit:git-checkout[1],
223linkgit:git-commit[1],
224linkgit:git-reflog[1],
225linkgit:git-reset[1]
09ccdb63
NS
226
227AUTHOR
228------
229Written by Nanako Shiraishi <nanako3@bluebottle.com>
230
231GIT
232---
9e1f0a85 233Part of the linkgit:git[1] suite