为什么`git diff`在`git add'之后没有报告文件更改` 为什么git diff认为没有变化

为什么`git diff`在`git add'之后没有报告文件更改` 为什么git diff认为没有变化,git,git-diff,git-add,Git,Git Diff,Git Add,…即使git status将其报告为已修改 git diffdiff与索引相比较,而不是与您的HEAD修订版相比较。通过运行gitadd,您已经将更改放在了索引中,因此当然没有区别!使用 git diff HEAD查看树状态与HEAD修订之间的差异,或 git diff--cached,查看索引和头版本之间的差异 因为默认情况下,git diff会检查暂存区域和工作副本之间的差异。当您git add时,暂存区域与工作副本匹配,因此diff不会报告任何更改 添加--cached标志会告诉diff

…即使
git status
将其报告为已修改


git diff
diff与索引相比较,而不是与您的
HEAD
修订版相比较。通过运行
gitadd
,您已经将更改放在了索引中,因此当然没有区别!使用

  • git diff HEAD
    查看树状态与
    HEAD
    修订之间的差异,或
  • git diff--cached
    ,查看索引和
    头版本之间的差异

因为默认情况下,git diff会检查暂存区域和工作副本之间的差异。当您
git add
时,暂存区域与工作副本匹配,因此diff不会报告任何更改


添加
--cached
标志会告诉diff-to-diff针对
头部

请尝试
git-diff--staged
命令

下面列出了可用的备选方案

git diff

显示索引/暂存文件和工作文件之间的更改。因为在您的情况下,
git add
将您的
文件和更改移动到暂存区域,所以没有显示/看到任何修改

git diff——分阶段执行

显示标头和索引/暂存之间的更改
gitdiff--cached
也做同样的事情<代码>暂存
缓存
可以互换使用

git差异头

显示头文件和工作文件之间的更改

git diff$commit$commit

显示两次提交之间的更改

git-diff-origin


显示头部和远程/原点之间的差异

遇到完全相同的问题

  • 添加使用git Add filename1.c创建的新文件
  • 对已经是存储库跟踪系统一部分的其他文件名2.c进行另一个更改
  • 执行git diff,您将只看到对filename2.c的更改。对filename1.c的更改将不会显示
  • 但是,如果执行git状态,您将看到filename1.c和filename2.c中的更改
  • 执行git commit-a-m“对filename1.c和filename2.c的更改”等等
  • 推一推
您将看到filename1.c已提交

$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   file-added
    modified:   file-with-changes   << it knows there are changes
$ git diff
  (nothing)

$ git diff rev-hash
diff --git a/file-with-changes b/file-with-changes
index d251979..a5fff1c 100644
--- a/file-with-changes
+++ b/file-with-changes
.
..