tags:

views:

229

answers:

2

I staged a few changes to be committed; how can I see the diff of all files which are staged for the next commit? I'm aware of git status, but I'd like to see the actual diffs - not just the names of files which are staged.

I saw that the git-diff(1) man page says

git diff [--options] [--] […]

This form is to view the changes you made relative to the index (staging area for the next commit). In other words, the differences are what you could tell git to further add to the index but you still haven't. You can stage these changes by using git-add(1).

Unfortunately, I can't quite make sense of this. There must be some handy one-liner which I could create an alias for, right?

+13  A: 

It should just be:

git diff --cached

--cached means show the changes in the cache/index (i.e. staged changes) against the current HEAD.

Charles Bailey
`--stashed` is a synonym for `--cached` - easier to remember if you've got "index=staging area" stuck in your head.
Jefromi
@Jefromi: You surely mean --staged, right? Anyway, thanks for pointing this out! This makes it easier for me (I also like to say 'git stage' instead of 'git add').
Frerich Raabe
Ouch, that was a bad typo. Yes, it's `--staged`.
Jefromi
+11  A: 

A simple graphic makes this clearer

Simple Git diffs

git diff

To see the changes between the working directory and the index. This shows what has been changed, but is not staged for a commit.

git diff --cached

To see the changes between the index and the HEAD(which is the last commit on this branch). This shows what has been added to the index and staged for a commit.

git diff HEAD

To see all the changes between the working directory and HEAD (which includes changes in the index). This shows all the changes since the last commit, whether or not they have been staged for commit or not.

Also:

There is a bit more detail on http://365git.tumblr.com/post/474079664/whats-the-difference-part-1

And take a look at Scott Chacon's short screencast on Git diff

Abizern