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 在显示未跟踪文件方面有何不同?的主要内容,如果未能解决你的问题,请参考以下文章