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

Posted

技术标签:

【中文标题】命令告诉 git 不要跟踪某些文件【英文标题】:Command to tell git to not track certain files 【发布时间】:2021-09-12 22:52:37 【问题描述】:

我知道这有一个捷径,但不记得了。

我在一个存储库中工作,大约有 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 的错误

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

任何建议将不胜感激!

【问题讨论】:

这能回答你的问题吗? ***.com/questions/13442130/… 不,绝对不是那里列出的任何命令。我真的可以发誓它是 git checkout -- 。不过,我可以试一试! 这是另一个:***.com/a/55351856/1264804 【参考方案1】:

要获取暂存区之外的文件,请使用git reset

git reset -- file1 file2

【讨论】:

【参考方案2】:

我想,当然是因为那两个文件还没有被追踪。

如果是这种情况,也许您想要的是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 的方式。

【讨论】:

以上是关于命令告诉 git 不要跟踪某些文件的主要内容,如果未能解决你的问题,请参考以下文章

Git使用的自我总结

Git:仅列出“未跟踪”文件(还有自定义命令)

永久排除某些跟踪文件

.gitignore

如何使用 git 命令行区分两个未跟踪的文本文件 [重复]

git 常用命令