“ git diff”什么都不做


94

我认为这是某个地方的配置错误,但我不知道在哪里。常规的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存储库下。

关于如何解决此问题的任何想法?


是什么让您认为有什么要排除的故障?您期望看到什么?
罗伯·肯尼迪

注意:在git diff 外部存储库中使用时,错误消息将很快被清除。请在下面
VonC

请注意,如果您尝试在两次提交之间对特定文件进行区分,但看不到输出,请确保文件路径中的大小写正确。
塞思花

Answers:


110

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

git diff [--options] [-] […]

该表格用于查看您相对于索引(下一次提交的临时区域)所做的更改。换句话说,差异就是您可以告诉git进一步添加到索引中的内容,但您仍然没有。

有关更多详细信息,请参见文档。特别是,向下滚动到示例,然后阅读本节:

$ git diff            # (1)
$ git diff --cached   # (2)
$ git diff HEAD       # (3)
  1. 将工作副本与索引进行比较
  2. 用HEAD区分索引
  3. 与HEAD对比工作副本

正如您所猜测的那样,在工作空间之外,git将不知道要进行比较的内容,因此您必须显式指定两个要比较的路径,因此会显示用法消息。


13
我不确定您的答案是否正确,但这确实帮助我找到了答案,因此谢谢您,我将其标记为正确!git diff的默认输出不是未提交更改的列表,而是未提交更改的列表,这些列表 “尚未准备好进行下一次提交”。因此,执行我期望的“ git diff”操作的命令实际上是“ git diff HEAD”。
汤姆·连扎

2
要完成图片,请使用git diff --cached显示索引中的内容。
道格拉斯

git diff执行以下操作:(索引)-(工作目录)还是相反:(工作目录)-(索引)?
BKSpurgeon'2

4

注意:从git 1.8.5或1.9开始,2013年第4季度

当用户在工作树之外键入“ git diff”时,认为他在其中,则当前错误消息是单行代码:

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

可能不足以使他意识到错误。

Not a git repository当我们进入“ --no-index”模式而没有明确的命令行选项来指示我们这样做时,请在错误消息中添加“ ” 。


看到:

澄清“ diff --no-index”的文档。
声明当不在存储库中时--no-index是隐含的,并且有两个参数是必需的。

澄清来自的错误消息,diff-no-index以通知用户CWD不在存储库中,因此必须使用两个参数。

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

什么都没发生

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.