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

Noa*_*oam 40 git git-diff git-status

如果我在我的仓库上运行'git status',它会给出:

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

但是,如果我执行'git diff myfile',它就没有显示出任何差异.这是因为我做了一个更改并将其删除,以便恢复原状吗?

我应该运行'git checkout myfile'来清除它吗?

Mar*_*gen 62

您的文件已暂存为已提交.你可以使用--cachedgit选项显示它的差异.

git diff --cached myfile
Run Code Online (Sandbox Code Playgroud)

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

您可以查看Git索引了解更多信息.

  • 这对我有用,但只有在我首先运行“git add”之后。谢谢。 (2认同)

Liy*_*ang 11

我偏爱--staged别名,主要是因为我发现--staged实际上意味着我想要做的事情,即告诉我阶段性的差异.

git diff --staged
Run Code Online (Sandbox Code Playgroud)

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

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

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

  2. HEAD(或head因为持有班次令人讨厌)是对你的分支的提示的参考.(对于那些计算击键次数的人来说,@是别名HEAD.)

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

git diff head
git diff @
Run Code Online (Sandbox Code Playgroud)