'Git Diff' Doesn't Give Any Output

If I run git diff I would expect to see a list of changes of my working directory relative to whatever had been committed before (or a list of the working directory contents if it's a new repository with no commits). Try this example:

$ mkdir temp
$ cd temp
$ git init
$ echo "first line" > test.txt
$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       test.txt
nothing added to commit but untracked files present (use "git add" to track)

Let's see a diff of test.txt:

$ git diff

This doesn't give any output!

I would expect to see a diff like + first line, but instead I get nothing. It doesn't tell me what's going on. People on Stack Overflow tell me to git add some files so I do:

$ git add .
$ git diff

Still nothing!

Git GUI shows the changes.

git status -v shows the changes.

But for some reason git diff doesn't show anything.

So my questions are:

  1. How, in plain English, does git diff work?
  2. How can I show a diff of all the changes I've made (unstaged and staged)?

Some people at my company are using Git, but the SVN crowd are going to point at this as a case of where Git is too confusing to be usable.

7

9 Answers

Why do you get no git diff output before adding?

Git does not treat files in the filesystem as automatically included in the version control system. You have to add things explicitly into the Git repository (as you are doing by adding the current directory with git add .).

There is no output to git diff because Git doesn't see any changes inside your repository, only files outside the repository, which it considers 'untracked' and so ignores when generating a diff.

I found this one of the key differences to version control systems like SVN (along with staging and ignoring directories).

If you want the untracked files to be included, git add them.

If you don't want them in your repository, add them to your .gitignore (see git ignore --help). This is good for C object files or Python .pyc files.

Maya Lin-Takahashi

Maya Lin-Takahashi

Consumer Tech & Gadget Reviewer

Maya is a hardware enthusiast who tests and reviews smart home devices, smartphones, wearables, and audio gear. She focuses on practical consumer value and build quality.