Git:如何删除现在在gitignore中但在提交之前添加到存储库的文件

6
我有一些文件在代码库中,同时也在.gitignore中。我想将这些文件从代码库中删除,但不希望在执行git pull origin master时从生产服务器中删除这些文件。我尝试了多个解决方案,但没有一个有效的,每次都会在拉取时从服务器中删除这些文件。
参考资料: 如何使Git“忘记”曾经被跟踪但现在在.gitignore中的文件? 将目录添加到.gitignore后从远程代码库中删除它们 如何删除列在.gitignore中但仍在代码库中的文件?
2个回答

3
据我所知,目前没有办法标记一个文件路径并添加“停止跟踪但保留现有版本”的标志。
在部署包含该文件的第一个版本时,您需要手动执行一项操作,即删除该文件。
例如:
cp file file.prod
git pull
mv file.prod file

这是我在搜索了数小时后看到的第一个答案(在SO上),它似乎解决了我的问题,即使用git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch *.ext' --prune-empty --tag-name-filter cat -- --all命令除了执行缓存区的清理外,也会删除HEAD中的文件。我很困惑为什么git rm --cached不影响HEAD,但是git filter-branch --index-filter 'git rm --cached...命令却有影响。 - goofology

1
你需要先使用git filter-branch命令,然后要求每个人将基于旧历史记录创建的分支进行变基。

请参阅:https://help.github.com/articles/remove-sensitive-data/

这很复杂,可能会导致问题,所以下次要小心,避免出现这种情况。

如果由于某些原因无法执行此操作,则需要等待时间机器的发明 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接