为什么在运行了`git add`命令后,`git diff`没有报告文件更改?

46

为什么git diff认为没有更改,即使git status报告了更改为modified

$ 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
.
..
4个回答

73
请尝试使用git diff --staged命令。以下是其他可用的选择。

git diff

显示索引/暂存区域和工作文件之间的更改。由于在您的情况下,git add将您的files-with-changes移动到了暂存区域,因此没有显示/看到任何修改。

git diff --staged

显示HEAD和索引/暂存区域之间的更改。git diff --cached也可以做相同的事情。stagedcached可以互换使用。

git diff HEAD

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

git diff $commit $commit

显示两个提交之间的更改

git diff origin

显示HEAD和远程/origin之间的差异

5

git diff命令用于将更改与索引进行比较,而不是与您的HEAD修订版进行比较。如果您运行git add,则已将更改放入索引中,因此当然没有任何差异!使用:

  • git diff HEAD命令可以查看您的树状态和HEAD修订版之间的差异,或者
  • git diff --cached命令可以查看索引和HEAD修订版之间的差异。

1

我遇到了完全相同的问题。

  • 使用git add filename1.c添加新创建的文件。
  • 对已经在存储库跟踪系统中的另一个filename2.c进行另一次更改。
  • 执行git diff,您将只看到对filename2.c的更改。不会显示filename1.c的更改。
  • 但是,如果执行git status,则会显示filename1.c和filename2.c中的更改。
  • 执行git commit -a -m“对filename1.c和filename2.c进行更改blah blah”
  • 执行git push

您将看到filename1.c已提交。


0

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

添加 --cached 标志告诉 diff 与 HEAD 进行比较。


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