之前,以下是我的.gitignore
file:
...
config/database.yml
.DS_Store
后来我创建了一个app_config.yml
文件放在 config 目录中并提交。
现在,我意识到我不需要app_config.yml
git 存储库中的文件。
我修改了我的.gitignore
file:
...
config/app_config.yml
config/database.yml
.DS_Store
现在,当我承诺时,app_config.yml
文件仍在我的存储库中。
我想从我的存储库中删除该文件。我该怎么做?
正如《忽略不会删除文件 http://gitready.com/beginner/2009/03/06/ignoring-doesnt-remove-a-file.html"
(以下引用来自尼克·夸兰托,
在他的博客中准备好 http://gitready.com/“学习 git 一次提交一个”):
当你告诉 Git 忽略文件时,它只会停止监视该文件的更改,而不会停止其他任何操作。
这意味着历史记录仍然会记住该文件并拥有它.
如果您想从存储库中删除文件,但将其保留在工作目录中,只需使用:
git rm --cached <file>
但是,这仍会将文件保留在历史记录中。
如果您确实想将其从历史记录中删除,您实际上有两个选择:
这两个选项都很糟糕,这是有充分理由的:Git 努力不丢失你的数据。
就像变基一样,Git 迫使您考虑这些类型的选项,因为它们是破坏性操作。
如果您确实想从历史记录中删除文件,git filter-branch
是您正在寻找的钢锯。
一定要仔细阅读它的内容manpage http://git-scm.com/docs/git-filter-branch在使用它之前,因为它实际上会重写您项目的提交。这实际上是执行某些操作的一个很好的工具,并且可以执行各种操作,例如完全删除作者的提交以移动项目根文件夹。从所有修订版本中删除文件的命令是:
git filter-branch --index-filter 'git rm --cached <file>' HEAD
当您需要清除可能已放置在存储库中的敏感或机密信息时,此操作绝对有用
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)