Git checkout删除gitignore中的文件

ait*_*iar 10 git

我不小心在git仓库中跟踪了工作区配置文件.试图解决问题,我将git rm --cached这些文件添加到.gitignore文件中.

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

Tob*_*ler 11

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

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

摘要:

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

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


1这样做的原因是你不想删除那些本来不应该从版本化版本的文件的其他用户版本,并且因为预计不会切换回旧版本,所以永远不会产生说"文件已存在"错误