“ Git diff”什么用都没有

我假设这是某处的配置错误,但我不知道在哪里。常规的 git 命令看起来工作得很好,但是“ git diff”什么也不做。为了安全起见,我从我的。Gitconfig 文件。这是通过 MacPorts 安装的,是最新版本(1.7.2.2)。

我所看到的是,当我从工作区运行“ git diff”时,它只是退出,什么也不做。

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

如果我从根工作区备份一个目录,输入“ git diff”会得到以下结果:

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

这可能是预期的行为,因为我不在 git 存储库下。

有什么办法可以解决这个问题吗?

65542 次浏览

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.

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.

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.

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>

Not in your case, but maybe because the file that you pass not exists

$ git difftool HEAD HEAD^ -- path/that-not-exists

nothing happen

This may not apply to all situations, but when I was having this issue it was because I had not added the new files to git and committed. I had mistakenly assumed the differences in the branches would automatically appear in git diff.

I would suggest to anyone stumbling upon this post to make sure they add and commit. Again, this does not apply to every situation, but it did mine and so it may others as well.

Happy coding