我在git repo中意外跟踪了工作区配置文件。尝试解决问题,我git rm --cached
这些文件并将其添加到.gitignore
文件中。
现在,每当我从回购中检出分支时,都会被删除。有什么方法可以避免这种情况吗?
答案 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 这样做的原因是你不想删除其他用户的这些文件的版本,这些文件从一开始就不应该被版本化,并且因为预计不会有切换回旧版本,这将永远不会产生说“文件已存在”错误