告诉 git 不跟踪某些文件的命令

问题描述

我知道有一个快捷方式,但不记得了。

我在一个存储库中工作,我需要添加和提交大约 8 个文件,还有 2 个已修改,我不需要提交。我不想为我提交的每个文件运行 git add <file>,而是想运行 2 个命令来忽略我不需要添加文件,然后为我正在添加/提交的 8 个文件运行 git add . .

我认为忽略我不需要的文件的命令是 git checkout -- <file I don't need>,但我不断收到错误 pathspec 'file I don't need' did not match any file(s) kNown to git

我想,当然,这是因为这两个文件仍未被跟踪。所以我用 git add . 添加了所有内容,然后运行 ​​git checkout -- <file I don't need>。但是,当我在那之后运行 git status 时,这些文件仍然显示为已提交。

任何建议将不胜感激!

解决方法

要将暂存区中的文件取出,请使用 git reset :

git reset -- file1 file2
,

我想,当然,这是因为这两个文件仍未被跟踪。

如果是这种情况,也许您想要的是 git add -ugit add -u .。这与 git add . 非常不同,因为 -u 表示更新。然后必须问一个显而易见的问题:更新什么?这在the documentation中得到了回答:

-u--update
更新索引就在它的位置 已经有一个与 匹配的条目。这也删除 as 修改索引条目以匹配工作树,但不添加 新文件。

如果在使用 -u 选项时没有给出 ,则所有 更新整个工作树中的跟踪文件(旧的 用于限制更新到当前目录的 Git 版本 及其子目录)。

这就是答案:-u 表示更新 Git 的索引。索引也称为暂存区,它保存了每个文件的副本,准备提交,与 Git 在进行下一次提交时将使用的格式完全相同。因此,更新索引会更新提议的下一次提交。

请注意,如果某个文件存在于 Git 的索引中,但您已将其从工作树中删除git add -u 将从 Git 的索引中删除该文件。也就是说,提议的下一次提交现在也缺少文件,就像工作树一样。完成此操作后,稍后的 git add -u 将不会重新添加该文件,因为它已经不在 Git 的索引中。您需要一个非 -u git add 将文件放入 Git 的索引中,以便 git add -u 会注意到此后工作树副本是否已被修改,并选择新的文件内容。

关于旧版 Git 的括号注释是描述 git add -u(未列出文件)在 Git 1.x 版中的工作方式。新的 2.x 行为检查当前工作目录之上的位置;要获得 Git 1.x 行为,请使用 git add -u .。这是有效的,因为 . 表示当前工作目录和所有子目录,这当然是 Git 1.x 解释裸 git add -u 的方式。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...