如何忽略已经提交的文件?

时间:2009-03-09 11:52:16

标签: git gitignore

以前,以下是我的.gitignore文件:

...
config/database.yml
.DS_Store

后来我在config目录中创建了一个app_config.yml文件并提交了它。

现在,我意识到我不需要git存储库中的app_config.yml文件。 我修改了.gitignore文件:

...
config/app_config.yml
config/database.yml
.DS_Store

现在,当我提交时,app_config.yml文件仍在我的回购中。 我想从我的仓库中删除该文件。我该怎么办?

2 个答案:

答案 0 :(得分:48)

正如“ignoring doesn't remove a file ”中所提到的 (以下引用 Nick Quaranto 的伟大文章,
在他的博客git ready“一次学习git一次提交”):

  

当你告诉Git忽略文件时,它只会停止观看该文件的更改,而不是其他任何内容。
  这意味着历史记录仍然会记住该文件并具有

     

如果要从存储库中删除文件,但将其保存在工作目录中,只需使用:

git rm --cached <file>
  

但是,这仍然会将文件保留在历史记录中。

     

如果您确实要将其从历史记录中删除,那么您确实有两个选择:

     
      
  • 重写您的存储库提交,或
  •   
  • 重新开始。
  •   
     

这两个选项都很糟糕,这是有充分理由的:Git努力不丢失你的数据   就像重新定位一样,Git强迫你考虑这些选项,因为它们是破坏性的操作。

     

如果您确实想要从历史记录中删除文件,那么 git filter-branch 就是您正在寻找的钢锯。
  在使用之前肯定会阅读 manpage ,因为它会逐字地重写项目的提交。对于某些操作来说,这实际上是一个很棒的工具,可以做各种各样的事情,比如完全删除作者提交的项目根文件夹。从所有修订中删除文件的命令是:

git filter-branch --index-filter 'git rm --cached <file>' HEAD
  

当您需要清除可能已存储在存储库中的敏感或机密信息时,此操作绝对有用

答案 1 :(得分:0)

当您想开始忽略已提交的文件并将其保留在项目中时没有帮助...因为 git rm --cached 会将其从git repo中删除...

我找到了我想要的How do I stop Git from tracking any changes to a file from this commit forward?

希望它对其他人也有用...