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

时间:2015-02-13 10:09:58

标签: git gitignore

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

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

的.gitignore:

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

知道为什么吗?

3 个答案:

答案 0 :(得分:5)

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

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

$ git rm --cached <file>

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


如果您希望Git忽略更改,以便git diffgit status不会报告这些更改,并且git commit -a不会提交更改(git add <file> + {{1并且git commit仍会添加它们),您可以使用此技巧 谎言到Git(参见git ready » temporarily ignoring files文章):

git commit <file>

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

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

git ls-files -v使用小写字母表示标记为假定未更改的状态文件

您可以使用

将其关闭
$ git ls-files -v
h <file>

请注意,此选项的最初目的是加速$ git update-index --no-assume-unchanged <file> 缓慢的平台上的状态。


关注@Dave评论,并引用Git - Difference Between 'assume-unchanged' and 'skip-worktree'问题,现代Git中的另一个选项是让Git不使用工作区版本 skip-worktree 位。

您可以使用

为已跟踪的文件启用它
stat

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

检查哪个文件的位设置
$ git update-index --skip-worktree <file>

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

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

答案 1 :(得分:3)

.gitignore只是告诉git哪些未跟踪的文件要忽略,所以如果你的文件已被git跟踪,它就不会做任何事情。相反,您可以告诉git使用此命令暂时忽略对跟踪文件的任何更改:

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

如果你想撤消这个,只需运行:

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

有关详细信息,请参阅here

答案 2 :(得分:-1)

取消阻止您要忽略的文件:

git rm --cached <file>

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