"git diff" 什么也不做。

112

我猜这是某个配置错误,但我无法找出具体在哪里。正常的git命令似乎工作良好,但是"git diff"没有任何反应。为了安全起见,我从我的.gitconfig文件中删除了外部diff工具。这是通过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仓库下,这可能是预期的行为。

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


你为什么认为有什么需要解决的问题?你期望看到什么? - Rob Kennedy
注意:在存储库之外使用git diff时的错误消息很快就会更清晰。请参见下面的我的答案 - VonC
1
请注意,如果您尝试在两个提交之间对特定文件进行差异比较,并且看不到任何输出,请确保文件路径的大小写拼写正确。 - Seth Flowers
6个回答

131
git diff 的默认输出是尚未提交或添加到索引中的更改列表。如果没有更改,则没有输出。

git diff [--选项] [--] […]

此格式用于查看您相对于索引(下一次提交的暂存区)所做的更改。换句话说,这些差异是您可以让 git 进一步添加到索引中,但您还没有这样做的差异。

请参阅文档了解更多详细信息。特别地,请滚动到示例部分并阅读此部分:
$ git diff            # (1)
$ git diff --cached   # (2)
$ git diff HEAD       # (3)
  1. 将工作副本与索引进行比较
  2. 将索引与 HEAD 进行比较
  3. 将工作副本与 HEAD 进行比较

在你的工作空间之外,就像你猜想的那样,git 不知道要比较什么,因此你必须明确指定两个路径进行比较,这就是使用说明信息的原因。


22
我不确定你的答案是否正确,但它确实帮助我找到了答案,所以谢谢你,我会把它标记为这样! git diff 的默认输出不是未提交更改的列表,而是未提交更改且_还没有_“暂存到下一次提交”的更改的列表。因此,执行我期望的“git diff”功能的命令实际上是“git diff HEAD”。 - Tom Lianza
3
为了完整呈现情况,请使用命令git diff --cached来显示索引中的内容。该命令将显示已暂存但尚未提交的更改。 - Douglas
git diff 做什么:(索引) - (工作目录) 还是相反的:(工作目录) - (索引)? - BenKoshy

4
注意: 从2013年第四季度开始git版本为1.8.5或1.9
当用户在认为自己在工作树内部时,在外部键入“git diff”时,当前的错误消息只有一行:
usage: git diff --no-index <path> <path>

可能不足以让他意识到错误。当我们陷入“--no-index”模式且没有明确的命令行选项指示我们这样做时,将“Not a git repository”添加到错误消息中。

参见:

澄清“diff --no-index”的文档。
指出当不在仓库内时,--no-index 被隐含,并且需要两个参数。

澄清 diff-no-index 的错误消息,告知用户当前工作目录不在仓库内,因此需要两个参数。

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

2

如果您的工作目录干净,且与上次更新没有差异,则不会发生任何操作。尝试编辑文件,然后再次运行git diff命令,这时应该会显示差异。


1

如果您在真实的存储库或工作副本之外使用它,则其行为与GNU diff相同。因此,您需要通知要比较的2个目录或文件。例如:

git diff old_dir new_dir

如果它们之间有任何差异,输出将会显示给您,正如您所期望的那样。


0

不是你的情况,但可能是因为你传递的文件不存在

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

什么也没发生


0
这可能并不适用于所有情况,但当我遇到这个问题时,是因为我没有将新文件添加到git并提交。我错误地认为分支之间的差异会自动出现在git diff中。
我建议任何遇到这个问题的人都要确保添加和提交。同样,这并不适用于每种情况,但对我来说是这样的,所以对其他人也可能有帮助。
祝编码愉快!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接