【问题标题】:How to see diff between working directory and staging index?如何查看工作目录和暂存索引之间的差异?
【发布时间】:2015-06-01 21:12:29
【问题描述】:

我们可以看到存储库和工作目录之间的区别:

git diff

我们可以看到 repository 和 staging index 之间的区别:

git diff --staged

但是我们如何看到工作目录和暂存索引之间的区别?

【问题讨论】:

    标签: git git-diff


    【解决方案1】:

    实际上,git diff 位于索引和工作树之间。碰巧的是,在您对索引(使用git add)进行分阶段更改之前,其内容将与HEAD 提交相同。

    git diff HEAD 位于 repo 和工作树之间。

    365git.tumblr.com post:

    【讨论】:

    • 我不明白这一点,因为现在我在存储库中有“file.txt”,内容为“1”。然后我在我的工作目录中修改该文件以具有内容“12”但不将其添加到暂存索引。然后,当我输入“git diff”时,我确实在控制台中显示了差异。所以暂存索引中没有任何内容,但我仍然知道存储库和工作目录之间的区别。我现在真的很困惑。
    • @matori82 默认情况下,索引等于repo。仅当您开始向其添加文件时,索引才与 repo 不同。
    • 啊...我不知道。我想我将不得不更深入地研究 git 内部以获得这样的信息......谢谢。
    • 但是,这个命令的逻辑似乎更加复杂。例如。如果我在索引中有一个文件,在工作目录中有一个修改过的文件,当我执行“git diff”时,工作目录中的文件会显示差异,但暂存索引中的文件的差异根本不会显示!现在真的很混乱......
    • @matori82 这是预期的:git diff 的目标默认是显示尚未跟踪的内容(添加到索引或提交)。默认情况下不再显示您对索引的内容,因为您已经对其进行了审核并决定将其作为下一次提交的一部分。
    【解决方案2】:
    • git diff - 将工作区域与索引进行比较。
    • git diff --staged - 将阶段区域与存储库进行比较。
    • git diff HEAD - 将工作区与存储库进行比较

    为了说明这一点,我更改了一个带有“Name Staged”文本的文件,然后添加了它(git add .)。之后,我再次更改了文件,现在我将文本替换为“命名工作区”,然后运行以下命令:

    现在您可以清楚地看到它是如何工作的。很酷,对吧?

    【讨论】:

      【解决方案3】:

      受@VonC 接受的答案启发,您也可以写成:

      代替git diff HEAD
      git difftool --dir-diff --no-prompt HEAD
      

      这将打开一个目录差异,显示您的工作树和 repo 之间的差异。从那里可以很容易地查看对单个文件的更改(例如,使用 Beyond Compare 之类的工具及其选项卡式 UI 时)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-06
        • 1970-01-01
        • 1970-01-01
        • 2012-04-07
        • 2023-01-18
        • 2022-10-23
        • 2016-06-17
        相关资源
        最近更新 更多