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

问题描述 投票:26回答:2

以前,以下是我的.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文件仍然在我的回购中。我想从我的仓库中删除该文件。我该怎么做?

git gitignore
2个回答
49
投票

如“qazxsw poi”中所述 (以下引用Nick Quaranto的精彩文章, 在他的博客qazxsw poi“一次学习git one commit”):

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

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

ignoring doesn't remove a file 

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

如果你真的想从历史中删除它,你真的有两个选择:

  • 重写您的存储库提交,或
  • 重来。

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

如果你真的想要从历史中删除文件,git ready就是你正在寻找的钢锯。 在使用它之前一定要读它的git rm --cached <file> ,因为它会逐字地重写你的项目提交。对于某些操作来说,这实际上是一个很好的工具,可以做各种各样的事情,比如完全删除作者提交的项目根文件夹。从所有修订中删除文件的命令是:

git filter-branch

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


0
投票

当你想要开始忽略已提交的文件并且你想将它保留在项目中时,这没有用...因为git rm --cached将从git repo中删除它...

我发现这个manpage这是我正在寻找的..

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

© www.soinside.com 2019 - 2024. All rights reserved.