git status 在内部的工作方式与 git diff 在显示未跟踪文件方面有何不同?

Posted

技术标签:

【中文标题】git status 在内部的工作方式与 git diff 在显示未跟踪文件方面有何不同?【英文标题】:How differently git status work internally than git diff to show untracked files? 【发布时间】:2015-05-03 19:56:20 【问题描述】:

Git diff 手册页说

显示工作树和索引或树之间的变化、索引和树之间的变化、两棵树之间的变化、两个 blob 对象之间的变化,或磁盘上两个文件之间的变化。

对于与定义的粗体部分相关的未跟踪文件,我在这里有点困惑。 这就是我所做的

touch test.html
git status

' 它显示了

blr-mpjfs:workflow_manager amazumde$ git status

On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)


test.html

但是当我这样做时 git diff 什么都没有出现在这里 如果我使用git add git diff 添加文件会显示差异

我看了Can I use git diff on untracked files? 还是不确定。

所以这是我的问题“git diff 是否显示工作之间的差异 未跟踪/在工作中创建的文件的树和索引 目录”?

编辑

如果它不应该显示未跟踪文件的差异,不是 描述有点不清楚?有没有清楚的地方 喊出来了吗?

二次编辑

还有

【问题讨论】:

【参考方案1】:

根据定义,“未跟踪文件”不在索引中。 (这似乎没有正确记录,但“跟踪文件”只是一个在索引中有一个条目的文件,而“未跟踪文件”是一个没有。这包括记录的索引条目的特殊情况删除文件的意图:跟踪此类文件,即使该文件的索引条目显示“不包含此文件”。)

因此,您的问题首先声称路径 P 不在索引中(即,P 未跟踪),然后询问 git 是否可以将通过路径 P 在索引中找到的文件与其他文件进行比较文件。如您所见,这个问题很难回答,因为它提出了两个相互矛盾的说法:P 不是 在索引中,同时P em> 在索引中。

【讨论】:

完美!!只有一个后续问题。那么 git status 是如何工作的呢? git status 基本上运行了两个比较:“HEAD vs index”告诉你设置什么进入下一次提交,“index vs work-dir”告诉你什么还没有设置发生。后者是特殊情况,因此如果工作目录中有一个不在索引中的文件,它可能会引发“未跟踪”投诉或“??” --short 输出中的状态(但首先 git status 检查忽略/排除条目)。因此,一个特殊情况(不是git diff 本身)是可以宣布“未跟踪”的地方。【参考方案2】:

您的问题可能与 can-i-use-git-diff-on-untracked-files 重复

正如这些答案中也提到的,您可以执行类似git diff --no-index tracked_file untracked_file(@Harold 的回答)之类的操作

【讨论】:

嗨..我已经清楚地指出了我看了一下但仍然不清楚的问题。这里我说的是目录级别【参考方案3】:

不,git diff 不能显示工作目录中未跟踪创建文件的工作树和索引之间的差异,SVN 也不能。

【讨论】:

那么描述是不是有点不清楚/令人困惑?你知道有什么明确指出的参考吗?

以上是关于git status 在内部的工作方式与 git diff 在显示未跟踪文件方面有何不同?的主要内容,如果未能解决你的问题,请参考以下文章

妙味课堂git 入门与实践

git 入门常用命令(转)

痞子衡嵌入式:第一本Git命令教程- 编辑(status/add/rm/mv)

git status 命令

git status 命令

Git - git status - 查看当前仓库状态