"git diff" does nothing

61,178

Solution 1

The default output for git diff is the list of changes which have not been committed / added to the index. If there are no changes, then there is no output.

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.

See the documentation for more details. In particular, scroll down to the examples, and read this section:

$ git diff            # (1)
$ git diff --cached   # (2)
$ git diff HEAD       # (3)
  1. Diff the working copy with the index
  2. Diff the index with HEAD
  3. Diff the working copy with HEAD

Outside your workspace, as you guessed, git won't know what to diff, so you have to explicitly specify two paths to compare, hence the usage message.

Solution 2

Note: starting git 1.8.5 or 1.9, Q4 2013:

When the user types "git diff" outside a working tree, thinking he is inside one, the current error message that is a single-liner:

usage: git diff --no-index <path> <path>

may not be sufficient to make him realize the mistake.

Add "Not a git repository" to the error message when we fell into the "--no-index" mode without an explicit command line option to instruct us to do so.


See:

Clarify documentation for "diff --no-index".
State that when not inside a repository, --no-index is implied and two arguments are mandatory.

Clarify error message from diff-no-index to inform user that CWD is not inside a repository and thus two arguments are mandatory.

To compare two paths outside a working tree:
usage: git diff --no-index <path> <path>

Solution 3

It does nothing if your working directory is clean and there are no differences from the last update. Try editing a file and then run git diff again, and it should then show the diff.

Solution 4

If you are using it outside of a real repository or work-copy, its behaviour is identical to the GNU diff. So you need to inform the 2 directories or files to be compared. Example:

git diff old_dir new_dir.

If there is any difference between them, the output will show you, as expected.

Share:
61,178

Related videos on Youtube

Tom Lianza
Author by

Tom Lianza

Former CTO at Wishpot and Ador. Acquired by LightInTheBox.

Updated on April 28, 2022

Comments

  • Tom Lianza
    Tom Lianza about 2 years

    I presume this is a configuration error somewhere, but I can't figure out where. Regular git commands appear to work fine, but "git diff" does nothing. To be safe, I removed external diff tools from my .gitconfig file. This was installed via MacPorts and is the lates version (1.7.2.2).

    What I see is that when I run "git diff" from my workspace, it simply exits, doing nothing.

    $ git --version
    git version 1.7.2.2
    $ git diff
    $ 
    

    If I back up one directory, out of my root workspace, typing "git diff" gives me this:

    $ git diff
    usage: git diff [--no-index] <path> <path>
    

    This may be expected behavior since I'm not under a git repository.

    Any ideas on what I can do to troubleshoot this?

    • Rob Kennedy
      Rob Kennedy over 13 years
      What makes you think there's anything to troubleshoot? What did you expect to see?
    • VonC
      VonC over 10 years
      Note: the error message when using git diff outside a repo will soon be clearer. See my answer below
    • Seth Flowers
      Seth Flowers over 9 years
      Note that if you are trying to diff a specific file between two commits and see no output, make sure the casing is correct in the path to the file.
  • Tom Lianza
    Tom Lianza over 13 years
    I'm not sure your answer is correct, but it did help me find the answer, so thank you and I'll mark it as such! The default output for git diff is not the list of uncommitted changes, it is the list of uncommitted changes that are also "not yet staged for the next commit". So, the command that does what I was expecting "git diff" to do is actually "git diff HEAD".
  • user276641
    user276641 over 13 years
    To complete the picture, use git diff --cached to show just what's in the index.
  • BenKoshy
    BenKoshy about 8 years
    does git diff do: (index) - (working directory) or the other way around: (working directory) - (index)?