【问题标题】:git: Why doesn't git diff show any differences?git:为什么 git diff 没有显示任何差异?
【发布时间】:2011-06-11 17:08:32
【问题描述】:

如果我在我的 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' 来清除它吗?

【问题讨论】:

    标签: git git-diff git-status


    【解决方案1】:

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

    git diff --cached myfile
    

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

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

    【讨论】:

    • 这对我有用,但只有在我首先运行“git add”之后。谢谢。
    • 确切地说,他的意思是您可以通过运行“git add”在暂存更改之前运行 git diff yourFileName,这样它就可以正常工作,但是如果您已经暂存了更改,则必须运行“git diff - -缓存”
    【解决方案2】:

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

    git diff --staged
    

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

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

    1. git diff &lt;commit&gt; 允许您查看当前位置与之前提交之间的差异。

    2. HEAD(或head,因为按住 shift 很烦人)是对分支尖端的引用。 (对于那些计算击键的人来说,@HEAD 的别名。)

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

    git diff head
    git diff @
    

    【讨论】:

      【解决方案3】:

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

      $git diff --staged
      

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

      $ git diff 
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-17
        • 1970-01-01
        • 2020-01-18
        • 2022-12-04
        相关资源
        最近更新 更多