@git / git-reference / commits / bf91400

Basic ropes on git stash command

Quick overview on what `git stash` is and some of the basic commands to run with it. Going with `git stash pop` as the default means of extracting from the stack instead of `git stash apply`. Former feels like the path of least surprise by taking out what you've just put in. As requested in #36

Soon Van committed Dec 22, 2012 at 01:06 UTC bf91400618097a5313cb6e0f19c62e29e1e368e8
2 files changed +108 -1
_layouts/reference.html
+1
@@ -51,6 +51,7 @@
51 <li><a href="/basic/#commit">commit</a></li>
52 <li><a href="/basic/#reset">reset</a></li>
53 <li><a href="/basic/#rm-mv">rm, mv</a></li>
54 + <li><a href="/basic/#stash">stash</a></li>
55 </ul>
56 </div>
57
basic/index.html
+107 -1
@@ -818,7 +818,113 @@ nothing to commit (working directory clean)
818 <p class="nutshell">
819 <strong>In a nutshell</strong>,
820 you run <code>git rm</code> to remove files from being tracked in Git. It
821 - will also remove them from your working directory.</p>
821 + will also remove them from your working directory.
822 + </p>
823 +
824 + </div>
825 +</div>
826 +
827 +<div class="box">
828 + <h2>
829 + <span class="docs">
830 + <a href="http://git-scm.com/docs/git-stash">docs</a> &nbsp;
831 + <a href="http://git-scm.com/book/en/Git-Tools-Stashing">book</a>
832 + </span>
833 + <a name="stash">git stash</a>
834 + <span class="desc">save changes made in the current index and working directory for later</span>
835 + </h2>
836 +
837 + <div class="block">
838 +
839 + <p>You're in the middle of some changes but something comes up that you
840 + need to jump over to, like a so-urgent-right-now bugfix, but don't want
841 + to commit or lose your current edits. <code>git stash</code> is there for you.
842 + </p>
843 +
844 + <h4>
845 + git stash
846 + <small>add current changes to the stack</small>
847 + </h4>
848 +
849 + <p>Stashing takes the current state of the working directory and index,
850 + puts it on a stack for later, and gives you back a clean working directory.
851 + It will then leave you at the state of the last commit.
852 + </p>
853 +
854 +<pre>
855 +<b>$ git status -s</b>
856 +<span class="red">M</span> hello.rb
857 +<b>$ git stash</b>
858 +Saved working directory and index state WIP on master: 5857ac1 hello with a flower
859 +HEAD is now at 5857ac1 hello with a flower
860 +<b>$ git status</b>
861 +# On branch master
862 +nothing to commit (working directory clean)
863 +</pre>
864 +
865 + <h4>
866 + git stash list
867 + <small>view stashes currently on the stack</small>
868 + </h4>
869 +
870 + <p>It's helpful to know what you've got stowed on the stash and this is where
871 + <code>git stash list</code> comes in. Running this command will display a queue
872 + of current stash items.
873 + </p>
874 +
875 +<pre>
876 +<b>$ git stash list</b>
877 +stash@{0}: WIP on master: 5857ac1 hello with a flower
878 +</pre>
879 +
880 + <h4>
881 + git stash pop
882 + <small>remove item from the list and apply to current working directory</small>
883 + </h4>
884 +
885 + <p>After you've done the changes you were called away for, and you're ready to
886 + continue from where you left off, run the <code>git stash pop</code> command
887 + to bring back the working directory to that state and remove it from the stash list.
888 + </p>
889 +
890 +<pre>
891 +<b>$ git stash pop</b>
892 +# On branch master
893 +# Changes not staged for commit:
894 +# (use "git add &lt;file>..." to update what will be committed)
895 +# (use "git checkout -- &lt;file>..." to discard changes in working directory)
896 +#
897 +# <span class="red">modified: hello.rb</span>
898 +#
899 +no changes added to commit (use "git add" and/or "git commit -a")
900 +Dropped refs/stash@{0}: (14ddbc6f2c26330e33d08faf15d88f816b6cbd45)
901 +</pre>
902 +
903 + <p>By default it will reapply the last added stash item to the working
904 + directory. This will be the item referenced by <code>stash@{0}</code>.
905 + You can grab another stash item instead if you reference it in the arguments
906 + list. For example, <code>git stash pop stash@{1}</code> will apply the item
907 + referenced by <code>stash@{1}</code>.
908 + </p>
909 +
910 + <p>If you want to leave the item on the stack, use
911 + <code>git stash apply</code> instead.
912 + </p>
913 +
914 + <h4>
915 + git stash clear
916 + <small>remove all items from the stash list</small>
917 + </h4>
918 +
919 + <p>When you're done with the stash and/or you want to remove of all the
920 + stored items, just run the <code>git stash clear</code> command. But only
921 + do this if you're sure you're done with the stash.
922 + </p>
923 +
924 + <p class="nutshell">
925 + <strong>In a nutshell</strong>, run <code>git stash</code> to quickly save
926 + some changes that you're not ready to commit or save, but want to come
927 + back to while you work on something else.
928 </p>
929
930 </div>