以前,以下是我的.gitignore
文件:
... config/database.yml .DS_Store
后来我app_config.yml
在config目录中创建了一个文件并提交了它.
现在,我意识到我不需要app_config.yml
git存储库中的文件.我修改了我的.gitignore
文件:
... config/app_config.yml config/database.yml .DS_Store
现在,当我提交时,该app_config.yml
文件仍在我的仓库中.我想从我的仓库中删除该文件.我该怎么做?
正如在" 忽略不删除文件 "中所提到的
(以下引用Nick Quaranto的精彩文章,
在他的博客git ready中 "一次学习git one commit"):
当你告诉Git忽略文件时,它只会停止观看该文件的更改,而不是其他任何内容.
这意味着历史记录仍会记住该文件并拥有它.如果要从存储库中删除文件,但将其保存在工作目录中,只需使用:
git rm --cached
但是,这仍然会将文件保留在历史记录中.
如果你真的想从历史中删除它,你真的有两个选择:
重写您的存储库提交,或
重来.
这两个选项真的太糟糕了,这是有充分理由的:Git努力不丢失你的数据.
就像重新定位一样,Git强迫你考虑这些选项,因为它们是破坏性的操作.如果您确实想从历史记录中删除文件,
git filter-branch
那么您正在寻找的钢锯.在使用它之前
一定要阅读它的联机帮助页,因为它将逐字地重写项目的提交.对于某些操作来说,这实际上是一个很好的工具,可以做各种各样的事情,比如完全删除作者提交的项目根文件夹.从所有修订中删除文件的命令是:
git filter-branch --index-filter 'git rm --cached' HEAD
当您需要清除可能已存储在存储库中的敏感或机密信息时,此操作绝对有用