忽略已经提交给Git仓库的文件
我有一个已经初始化的Git仓库,我添加了一个.gitignore文件。 我怎样才能刷新文件索引,所以我想忽略的文件被忽略? 
 要查找已经添加/初始化到您的存储库的单个文件, 即停止跟踪文件,但不能将其从系统中删除,请使用: git rm --cached filename 
 要解开现在在.gitignore 每个文件: 
首先提交任何未完成的代码更改 ,然后运行以下命令:
 git rm -r --cached . 
这将从索引 (暂存区域)中删除所有已更改的文件,然后运行:
 git add . 
承诺:
 git commit -m ".gitignore is now working" 
 要撤消git rm --cached filename ,请使用git add filename 。 
如果您试图忽略对已经在存储库中进行跟踪的文件的更改(例如,您需要为本地环境更改的dev.properties文件,但不希望检查这些更改),而不是您想要执行的操作是:
 git update-index --assume-unchanged <file> 
如果你想再次开始跟踪更改
 git update-index --no-assume-unchanged <file> 
请参阅git-update-index(1)手册页 。
 也可以看看update-index的skip-worktree和no-skip-worktree选项,如果你需要通过 git-reset( via ) 
更新:由于人们一直在问,这里有一个方便的(以及更新后的评论)别名,用于查看当前工作空间中的哪些文件被“忽略”( – 未修改)
 $ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]" 
 要将已经添加/初始化到您的存储库的文件解压缩,即停止跟踪文件,但不要将其从系统中删除,请使用: git rm --cached filename 
 是的.gitignore系统只会忽略git目前不受版本控制的文件。 
 也就是说,如果您已经使用git-add添加了名为test.txt的文件,那么将test.txt添加到.gitignore仍然会导致对test.txt更改进行跟踪。 
 您将不得不首先git rm test.txt并提交更改。 只有这样,才能将对test.txt更改忽略。 
删除.gitignore中的尾部空格
此外,请确保您的.gitignore中没有尾随空格。 我遇到了这个问题,因为我正在寻找一个答案,然后我有一个有趣的感觉,我应该打开编辑,而不是只是cat'ing .gitignore。 从最后删除了一个额外的空间,现在它的工作原理:)
我遵循这些步骤
 git rm -r --cached . git add . git reset HEAD 
之后,git删除所有应该忽略的文件(在我的情况下是* .swp)。
 如果你想停止跟踪文件,而不删除本地系统的文件,我宁愿忽略config/database.yml文件。 只需尝试: 
 git rm --cached config/database.yml # this will delete your file from git history but not from your local system. 
 现在,将该文件添加到.gitignore文件并提交更改。 从现在开始,对config / database.yml所做的任何更改都不会被git跟踪。 
 $ echo config/database.yml >> .gitignore 
谢谢
要从跟踪中删除一些特定的文件:
 git update-index --assume-unchanged path/to/file 
如果您想再次开始追踪:
 git update-index --no-assume-unchanged path/to/file 
正如dav_i所说,为了使文件保持在repo状态,并在不创build额外提交的情况下将其从更改中删除,可以使用:
 git update-index --assume-unchanged filename 
对于像我这样慢的人来说,还有另外一个build议=)将.gitignore文件放到你的仓库根目录下, 而不是放在.git文件夹中。 干杯!
我不太清楚“回答”命令做了什么,我跑了,非常沮丧。 它recursion地从你的git仓库中删除每个文件。
Stackoverflow救援… 如何恢复“git rm -r。”?
 git reset HEAD 
有没有诀窍,因为我没有提交本地文件,我不想覆盖。
没有答案为我工作。
代替:
- 将文件移出git控制的目录
- 检查到git的删除
- 将文件移回到git控制的目录中
移动文件后,git会忽略它。
与目录一起工作!
如果文件已经在版本控制中,则需要手动删除它们。
我遇到的另一个问题是我发表了一个内联评论。
 tmp/* # ignore my tmp folder (this doesn't work) 
这工作
 # ignore my tmp folder tmp/ 
 感谢你的回答,我能够写这个小小的一行来改进它。 我把它运行在我的.gitignore和repo上,没有问题,但如果有人看到任何明显的问题,请发表评论。 这应该git rm -r --cached从.gitignore : 
cat $(git rev-parse –show-toplevel)/。gitIgnore | sed“// $ //”| grep -v“^#”| xargs -L 1 -I {} find $(git rev-parse –show-toplevel)-name“{}”| xargs -L 1 git rm -r –cached
 请注意,您将会遇到很多fatal: pathspec '<pathspec>' did not match any files 。 这只是为了没有被修改的文件。 
复杂的答案处处!
只要使用以下
 git rm -r --cached . 
它将从您的计算机上删除您试图忽略的文件,而不是从您的计算机上的主文件!
之后,只要承诺和推!
我用.gitignore发现了一个奇怪的问题。 一切都到位了,似乎是正确的。 为什么我的.gitignore被“忽略”的唯一原因是,行结束是Mac-Format(\ r)。 所以在保存了正确的行结尾的文件后(在vi中使用:set ff = unix),所有的东西都像魅力一样工作!
这里没有提到的另一个问题是,如果你在Windows记事本中创build了.gitignore,那么在我发现的其他平台上看起来就像是乱码。 关键是要确保你的编码在记事本中设置为ANSI,(或者像我一样在linux上创build文件)。
从我的答案在这里: https : //stackoverflow.com/a/11451916/406592
在我的服务器linux服务器(不是我的本地开发mac)上,只要我不添加星号,目录将被忽略:
WWW /档案馆/ *
我不知道为什么,但是让我放松了几个小时,所以我想分享…
 还有一点要记住,如果.gitignore似乎没有忽略未跟踪的文件,那么你不应该在同一行忽略注释。 所以这是好的 
 # ignore all foo.txt, foo.markdown, foo.dat, etc. foo* 
但是这不起作用:
 foo* # ignore all foo.txt, foo.markdown, foo.dat, etc. 
  .gitignore将后一种情况解释为“忽略名为"foo* # ignore all foo.txt, foo.markdown, foo.dat, etc." “的文件, "foo* # ignore all foo.txt, foo.markdown, foo.dat, etc." ,当然这并不是。 
如果你需要停止跟踪很多被忽略的文件,你可以结合一些命令:
 git ls-files -i --exclude-standard | xargs -L1 git rm --cached 
 这将停止跟踪被忽略的文件。 如果你想从文件系统中删除文件,不要使用--cached选项。 您也可以指定一个文件夹来限制search,例如: 
 git ls-files -i --exclude-standard -- ${FOLDER} | xargs -L1 git rm