55

如果我在我的 repo 上运行“git status”,它会给出:

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

但是,如果我执行 'git diff myfile',它不会显示任何差异。这是因为我进行了更改并删除了它,所以它恢复到原来的状态了吗?

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

4

3 回答 3

78

您的文件已准备好提交。--cached您可以使用git 选项显示它的差异。

git diff --cached myfile

要取消暂存它,只需执行 git status 在其输出中建议的操作;)

您可以查看The Git Index了解更多信息。

于 2011-01-19T11:54:21.793 回答
16

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

git diff --staged

接受的答案是正确的,我对此毫无疑虑。只是个人认为--cached感觉 git diff 正在缓存答案并向我显示预先计算的结果或其他东西。

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

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

  2. HEAD(或者head因为保持班次很烦人)是对分支尖端的引用。(对于那些计算击键的人,@是 的别名HEAD。)

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

git diff head
git diff @
于 2016-10-08T21:08:09.230 回答
1

对于暂存区与存储库比较使用

$git diff --staged

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

$ git diff 

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

于 2017-02-25T21:17:49.480 回答