为什么git要添加--update将新文件添加到索引中?

为什么git要添加--update将新文件添加到索引中?,git,Git,git add的-u标志似乎没有按照文档记录的方式工作;有人能解释一下我遗漏了什么吗 -u(或--update)标志记录如下: -u, --update Update the index just where it already has an entry matching <pathspec>. This removes as well as modifies index entries to match the working tree, but adds no

git add的
-u
标志似乎没有按照文档记录的方式工作;有人能解释一下我遗漏了什么吗

-u
(或
--update
)标志记录如下:

-u, --update
    Update the index just where it already has an entry matching <pathspec>. This removes as well as
    modifies index entries to match the working tree, but adds no new files.

    If no <pathspec> is given when -u option is used, all tracked files in the entire working tree are
    updated (old versions of Git used to limit the update to the current directory and its
    subdirectories).
-u,--update
仅在索引已具有匹配项的位置更新索引。这不仅可以消除
修改索引项以匹配工作树,但不添加新文件。
如果使用-u选项时给出“否”,则整个工作树中的所有跟踪文件都将被删除
更新(Git的旧版本,用于将更新限制为当前目录及其
子目录)。
通过我的阅读,一个普通的
git add-u
不应该向索引中添加任何新文件,而应该只重新添加任何已经暂存的文件。这就是我想要的行为


但是,如果我修改了一个文件,然后运行
git add-u
,修改后的文件将被暂存,就像我没有使用
-u
一样。我不明白如何将这种行为与docs声明的“不添加新文件”相协调。

git add-u
只添加跟踪到您的暂存的文件。如果您创建了一个新文件并运行了
git add-u
,那么新文件将不会进行提交。

您可能认为签出提交中的所有内容都不存在索引项;但他们确实如此。并非每个索引项都通过
git status
(例如)显示,这与并非工作树中的每个文件都列出的方式相同<代码>状态仅显示对索引或工作树的更改。但“跟踪”和“索引中”的意思是一样的


所以,这就是
-u
所做的一切-它阻止跟踪未跟踪的文件。如果您只想提交已经进行了一些更改的文件,那么您需要一个自定义解决方案。

选项说明中提到的新文件是Git未跟踪的文件。索引不仅包含差异,它是工作树的完整快照,并且包含所有跟踪文件(无论是否修改)。在
git commit
上,它将成为下一次提交。@axiac-谢谢。根据该链接,“索引”与“暂存区”相同,因此不应包含完整的快照;只有暂存文件,对吗?看一看报告的第二段。事实上,“索引”和“暂存区”(以及“缓存”)是同一事物的不同名称。@Doradus:不知道“不添加未跟踪的文件”是否会更清楚,但这是句子的正确含义。@Doradus您不能查看已跟踪但未暂存的文件。一般来说,你不会看到人们提到“暂存”一个文件,而是说暂存对一个文件的更改,你可以通过更新索引中文件的映像来做到这一点。但正如我们许多人所注意到的,索引包含一个完整的快照——正如我在下面的ansewr中所注意到的,这就是为什么您看到的与文档一致。谢谢。我不知道如何与文档协调,文档说它“修改索引项以匹配工作树,但不添加新文件。”没有什么需要协调的。看看你自己做了什么。“但是,如果我修改了一个文件,然后运行
git add-u
,修改后的文件将被暂存”。对该文件已被修改。这并不新鲜。因此,它是由git add-u进行分段的。医生说的一切都会发生。你明白“新”是什么意思吗?“文档声明它“不添加新文件”是的。这不是一个新文件。这是一个修改过的文件。明白了吗?马克说得对:我不知道所有被跟踪的文件都已经在索引中了,即使它们没有通过
git status
显示。我以为“new”对应的是“git status以前没有显示它,现在是了”。谢谢,这正是我犯的错误。