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