git: Why doesn't git diff show any differences?
If I run 'git status' on my repo it gives:
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: myfile
However, if I do a 'git diff myfile' it shows no differences. Is this because I have made a change and removed it so it is back to the original?
Should I run 'git checkout myfile' to clear it?
Solution 1:
Your file is already staged to be committed. You can show it's diff using the --cached
option of git.
git diff --cached myfile
To unstage it, just do what git status suggests in it's output ;)
You can check The Git Index For more info.
Solution 2:
I have a preference for the --staged
alias, mostly because I find that --staged
actually means what I want to do, i.e. show me the staged differences.
git diff --staged
The accepted answer is correct and I have no qualms with it. Just personally think that --cached
feels like git diff is caching the answer and showing me pre-calculated results or something.
I also like git diff HEAD
because it's a more general. It puts together two concepts that most folks know, that is:
git diff <commit>
allows you to see the difference between your current position and a previous commit.HEAD
(orhead
because holding shift is annoying) is a reference to the tip of your branch. (For those of you who are counting keystrokes,@
is an alias forHEAD
.)
Combined, these two generally useful concepts result in:
git diff head
git diff @
Solution 3:
For Staging Area vs Repository comparison use
$git diff --staged
For Working vs Repository comparison use
$ git diff
but if a file is changed and added to staging area ($ git add fileName
) and we try to see the difference with ( $ git diff
). It will not return any difference since the file is in staging area and it will not be compared with the repository.