This is part 4 in my Favourite Git Commands series.
Cleaning up
Whether you want to do a quick bugfix in a different branch or just get
rid of all your debugging, keeping your working directory clean is a
good idea. Another way to do this is to use git reset --patch
from
part 1.
git stash
The stash is where you can store local modifications which you can then restore later.
Quickfix in other branch
If you need to hop to another branch but you’re in the middle of something then this type of thing works great:
git stash # Save all local changes to stash
git checkout release # Switch to branch needing quick fix
# Perform fix here
git commit # Commit the fix to the release branch
git checkout feature # Return to the feature branch you were on
git stash apply # Re-apply the changes that you saved to stash
git stash drop # If the above went well, tidy up
Testing staged changes
If you have a lot of changes in your working copy that you don’t want to commit (e.g. debugging) but you want to test your staged changes then you can do the following:
git stash --keep-index # Remember index===staging area
# Perform tests here
git stash pop # apply/drop all in one
If you’re planning to keep the changes on the stash for longer then I’d
advise you to use git stash apply
followed by git stash drop
over
git stash pop
as if the apply fails you still have your original
changes in the stash and it’s easier to resolve.
git reset --hard HEAD
This will clear out your staging area and working copy, checking out a
fresh copy of HEAD. Use with caution as it does not store the work
that is discarded. git reset --hard HEAD^
will do the same, but will
also throw away your top commit on the current branch as well.
git stash; git stash drop
This is similar to the above, but it actually stores the code into git’s local files (before deleting the reference) so it is ever-so-slightly safer. Note this will be lost when git next does garbage collection.