Update 2:
I’m not sure why people are complaining about this answer, it seems to be working perfectly with me, for the untracted files you can add the -u
flag
The full command becomes git stash --keep-index -u
And here’s a snippet from the git-stash
help
If the –keep-index option is used, all changes already added to the
index are left intact.If the –include-untracked option is used, all untracked files are
also stashed and then cleaned up with git clean, leaving the working
directory in a very clean state. If the –all option is used instead
then the ignored files are stashed and cleaned in addition to the
untracked files.
And this is a gif of how it looks:
Update:
Even though this is the selected answer, a lot have pointed out that the [answer below](https://stackoverflow.com/a/34681302/292408) is the correct one, I recommend checking it out.
I tested my answer again today (31/1/2020) against git version 2.24.0
, and I still believe that it’s correct, I added a small note above about the untracked files.
If you think it’s not working please also mention your git version.
Old answer:
If the --keep-index
option is used, all changes already added to the index are left intact:
git stash --keep-index
From the documentation of git-stash
:
Testing partial commits
You can use
git stash save --keep-index
when you want to make two or
more commits out of the changes in the work tree, and you want to test
each change before committing:# ... hack hack hack ... $ git add --patch foo # add just first part to the index $ git stash save --keep-index # save all other changes to the stash $ edit/build/test first part $ git commit -m 'First part' # commit fully tested change $ git stash pop # prepare to work on all other changes # ... repeat above five steps until one commit remains ... $ edit/build/test remaining parts $ git commit foo -m 'Remaining parts'
But, if you just want to visually check the staged changes only, you can try difftool
:
git difftool --cached