“git diff”啥都不做

Posted

技术标签:

【中文标题】“git diff”啥都不做【英文标题】:"git diff" does nothing“git diff”什么都不做 【发布时间】:2011-04-04 13:58:29 【问题描述】:

我认为这是某个地方的配置错误,但我不知道在哪里。常规的 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 outside a repo 时的错误信息很快就会更清晰。见my answer below 请注意,如果您尝试在两次提交之间区分特定文件并且看不到输出,请确保文件路径中的大小写正确。 【参考方案1】:

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

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

此表单用于查看您对索引所做的更改(下一次提交的暂存区)。换句话说,差异在于您可以告诉 git 进一步添加到索引中,但您仍然没有。

有关详细信息,请参阅documentation。特别是,向下滚动到示例,并阅读本节:

$ git diff            # (1)
$ git diff --cached   # (2)
$ git diff HEAD       # (3)
    用索引区分工作副本 用 HEAD 区分索引 使用 HEAD 区分工作副本

在您的工作区之外,正如您所猜测的,git 不知道要区分什么,因此您必须明确指定两个要比较的路径,因此使用消息。

【讨论】:

我不确定你的答案是否正确,但它确实帮助我找到了答案,所以谢谢你,我会这样标记它! git diff 的默认输出是 not 未提交更改的列表,它是未提交更改的列表也是“尚未为下一次提交暂存”。因此,执行我期望“git diff”执行的命令实际上是“git diff HEAD”。 要完成图片,使用 git diff --cached 来显示索引中的内容。 git diff 是做:(索引)-(工作目录)还是相反:(工作目录)-(索引)?【参考方案2】:

注意:starting git 1.8.5 or 1.9, Q4 2013:

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

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

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

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


见:

commit 286bc123cd (gitster, Junio C Hamano),这说明 git diff --no-index 可以像普通的(非 git)diff 一样工作。 commit b214eddfb2(Dale R. Worley),它澄清了错误消息:

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

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

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

【讨论】:

【参考方案3】:

如果您的工作目录是干净的并且与上次更新没有任何区别,则它不会执行任何操作。尝试编辑一个文件,然后再次运行 git diff,它应该会显示差异。

【讨论】:

【参考方案4】:

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

git diff old_dir new_dir.

如果它们之间有任何差异,输出将按预期显示。

【讨论】:

【参考方案5】:

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

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

什么都没发生

【讨论】:

以上是关于“git diff”啥都不做的主要内容,如果未能解决你的问题,请参考以下文章

git diff 配置 meld diff

git diff 与 git diff -- cached 区别

修复git diff正文中文乱码

git diff

git diff 命令

拯救错误啥都不做?