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

时间:2011-01-19 11:46:36

标签: git git-diff git-status

如果我在我的仓库上运行'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 个答案:

答案 0 :(得分:60)

您的文件已暂存以提交。你可以使用git的--cached选项来显示它的差异。

git diff --cached myfile

要取消它,只需执行git status在其输出中建议的内容;)

您可以查看The Git Index了解详情。

答案 1 :(得分:10)

我偏爱--staged别名,主要是因为我发现--staged实际意味着我想要做的事情,即向我展示阶段性差异。

git diff --staged

接受的答案是正确的,我对它没有任何疑虑。只是个人认为--cached感觉就像git diff正在缓存答案并向我展示预先计算的结果或其他东西。

我也喜欢git diff HEAD,因为它更通用。它汇集了大多数人都知道的两个概念,即:

  1. git diff <commit>可让您查看当前位置与之前提交之间的差异。

  2. HEAD(或head,因为持有转移很烦人)是对分支提示的引用。 (对于那些计算击键次数的人,@HEAD的别名。)

  3. 结合起来,这两个通常有用的概念导致:

    git diff head
    git diff @
    

答案 2 :(得分:0)

对于临时区域与存储库比较,请使用

$git diff --staged

对于工作与存储库比较,请使用

$ git diff 

但如果文件已更改并添加到暂存区域($ git add fileName),我们会尝试查看($ git diff)的差异。它不会返回任何差异,因为文件位于暂存区域,并且不会与存储库进行比较。