Git checkout删除gitignore中的文件

时间:2013-08-27 11:38:27

标签: git

我在git repo中意外跟踪了工作区配置文件。尝试解决问题,我git rm --cached这些文件并将其添加到.gitignore文件中。

现在,每当我从回购中检出分支时,都会被删除。有什么方法可以避免这种情况吗?

1 个答案:

答案 0 :(得分:10)

问题是git rm提交存在于某些分支中但不是全部,这意味着当您从仍然包含文件的一个分支切换到您git rm时,git会将正确删除文件。你真正想要做的是从git的历史中删除文件,好像它们从未在那里,this question之后。但是,您应该知道这意味着重写存储库历史记录,因此,对于一件事情,您之后将不得不git push --force,而对于另一件事,您将会打扰其他也使用此存储库的人。

编辑如果重写历史记录不可行,请确保在现有的每个分支上提交git rm --cached操作。但是,如果您在删除之前签出修订版,您仍会遇到令人不快的重新删除。

<强>摘要

    如果历史记录无法重写,则
  • 向每个分支提交.gitignore + git rm --cached,但请记住,检查任何以前的修订版本(例如通过标记)将a)产生有关现有未跟踪文件的错误git想要签出,b)在切换回HEAD时再次删除这些文件
  • 重写历史记录,如果您可能经常检查以前的修订版(或者某些意外提交的文件包含敏感数据)以避免这种情况,但要注意这会搞砸其他人的克隆

实际上,还有第三种可能性:对于每个分支,创建一个新的分支,在其中重写历史记录,而在原始版本中添加一个提交删除所有文件(除了要忽略的文件! 1 < / sup>)添加一个高度可见的文件,解释这个混乱,并要求用户从现在开始切换到重写的分支,并删除它们的本地副本。


1 这样做的原因是你不想删除其他用户的这些文件的版本,这些文件从一开始就不应该被版本化,并且因为预计不会有切换回旧版本,这将永远不会产生说“文件已存在”错误