git:为什么git diff没有显示任何差异?

58

如果我在我的存储库上运行'git status',它会给出以下结果:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified: myfile

然而,如果我运行 'git diff myfile' 命令,它不会显示任何差异。这是因为我已经进行了更改并将其删除,从而使其回到原始状态吗?

我是否应该运行 'git checkout myfile' 命令来清除它?

3个回答

83

你的文件已经被暂存以便提交。你可以使用 git 的 --cached 选项展示它的差异。

git diff --cached myfile

要取消暂存,只需按照git状态建议的操作进行即可 ;)

您可以查看Git索引以获取更多信息。


2
这对我有用,但只有在我先运行了“git add”之后才有效。谢谢。 - atw
1
他的意思是在运行“git add”之前,您可以运行“git diff yourFileName”来确保它能正常工作。但是如果您已经暂存了更改,那么您需要运行“git diff --cached”。 - Mina Ragaie

19

我更喜欢使用--staged这个别名,主要是因为我发现--staged确实意味着我想要做的事情,也就是显示暂存区的差异。

git diff --staged

被接受的答案是正确的,我没有异议。只是个人认为 --cached 感觉像是 git diff 正在缓存答案并向我展示预先计算出的结果之类的东西。

我也喜欢 git diff HEAD,因为它更加通用。它将大多数人知道的两个概念结合在一起,即:

  1. git diff <commit> 允许您查看当前位置和以前提交之间的差异。

  2. HEAD (或者 head 因为按住 shift 键很烦人)是您分支的末端引用。(对于那些计算击键次数的人来说,@HEAD 的别名。)

综合起来,这两个通常有用的概念的结果是:

git diff head
git diff @

1

用于暂存区与仓库的比较,请使用以下内容

$git diff --staged

使用“工作区与代码库比较”进行比较,请保留HTML标记。
$ git diff 

但是,如果文件被更改并添加到暂存区($ git add fileName),并且我们尝试使用($ git diff)查看差异。它将不会返回任何差异,因为该文件在暂存区中,并且不会与存储库进行比较。


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