如何忽略对已提交文件的任何更改 Git

How to ignore any changes on already committed file to Git

我需要忽略对已被 Git 跟踪的特定文件所做的任何更改。这些文件不应从本地或远程存储库中删除。

我试图在 .gitignore 中忽略它们,但它不起作用。

.gitignore:

$MAVEN_PATH_TO_CHILD_MODULE/src/main/java/$PACKAGE/$CLASS.java

知道为什么吗?

取消跟踪您要忽略的文件:

git rm --cached <file>

然后您可以添加文件并且.gitignore不会跟踪被忽略的文件。

.gitignore 只是告诉 git 要忽略哪些未跟踪的文件,因此如果您的文件已被 git 跟踪,它不会执行任何操作。相反,您可以使用以下命令告诉 git 暂时忽略对跟踪文件的任何更改:

git update-index --assume-unchanged <file>

如果您想撤消此操作,只需 运行:

git update-index --no-assume-unchanged <file>

有关详细信息,请参阅 here

只能忽略未跟踪的 个文件(未添加到Git)。或者换句话说,忽略是关于 Git 不知道的文件,即不在索引中(暂存区中没有条目)。

要使文件不被跟踪(将其从索引中删除,从而在下一次提交时将其暂存以防止删除),但将其保留在工作区域中,即在文件系统中,您可以使用

$ git rm --cached <file>

在本地提交和推送到远程之后,文件将从远程存储库中删除(从顶级提交的树中 - 它仍将存在于历史记录中)。


如果您想让 Git 忽略更改,以便 git diffgit status 不会报告它们,并且 git commit -a 不会提交它们(但是 git add <file> + git commitgit commit <file> 仍然会添加它们),你可以用这个 trick[=69] lie 到 Git =](参见 git ready » temporarily ignoring files 文章):

$ git update-index --assume-unchanged <file>

git update-index 命令是低级(管道)命令。您可以找到哪些文件“假定未更改”:

$ git ls-files -v
h <file>

git ls-files -v 使用小写字母表示标记为 假设未更改.

的状态文件

您可以使用

将其关闭
$ git update-index --no-assume-unchanged <file>

请注意,此选项最初的目的是在 stat 较慢的平台上加速状态。


在@Dave 评论之后,并引用了 Git - Difference Between 'assume-unchanged' and 'skip-worktree' 问题,另一个足够现代的选项 Git 是 Git 不使用 [= 的工作区版本61=]跳过工作树位。

您可以使用

为跟踪的文件打开它
$ git update-index --skip-worktree <file>

这使得 Git 使用索引版本(最后提交的版本)代替文件系统中的版本。您可以使用

检查哪些文件设置了此位
$ git ls-files -v
S <file>

git ls-files -v 命令将使用 S 表示设置了“skip-worktree”的文件。

请注意,此选项最初的目的是支持稀疏结帐。