如何忽略已提交的文件到Git的任何更改
这个问题在这里已经有了答案:
只有未跟踪的文件(未添加到Git)可以忽略。 换句话说,忽略是关于Git未知的文件,即不在索引中(在暂存区域中没有条目)。
为了使文件不被跟踪(从索引中删除它,从而在下一次提交中将它从删除中暂存),但将它保存在工作区域中,即在文件系统中,可以使用
$ git rm --cached <file>
该文件将在本地提交后以及推送到远程后从远程存储库中删除(从顶层提交树 - 它将保留在历史记录中)。
如果你希望Git忽略更改,以便git diff
和git status
不报告它们,并且git commit -a
不会提交它们(但是git add <file>
+ git commit
和git commit <file>
仍然会添加它们) ,你可以用这个技巧对Git说谎(参见git ready»暂时忽略文件文章):
$ 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 - '假定 - 不变'和'skip-worktree'问题之间的区别,现代Git中的另一个选项是让Git不使用具有skip-worktree位的工作区版本。
您可以用一个跟踪文件打开它
$ git update-index --skip-worktree <file>
这使得Git使用索引版本(最后提交的版本)来代替文件系统的版本。 您可以检查哪些文件具有该位
$ git ls-files -v
S <file>
git ls-files -v
命令将使用S
来表示带有“skip-worktree”集的文件。
请注意,此选项最初的目的是支持稀疏检出。
.gitignore只是告诉git哪些未跟踪的文件要忽略,所以如果你的文件已经被git跟踪了,它将不会执行任何操作。 相反,您可以通过使用此命令告诉git临时忽略对跟踪文件的任何更改:
git update-index --assume-unchanged <file>
如果您想解除这个问题,只需运行:
git update-index --no-assume-unchanged <file>
详情请看这里。
解开您想要忽略的文件:
git rm --cached <file>
然后你可以添加文件, .gitignore
不会跟踪被忽略的文件。
上一篇: How to ignore any changes on already committed file to Git
下一篇: .gitignore not working after adding it to already modified repo.