删除Git服务器文件但是保留本地文件
参考:
https://blog.csdn.net/u012804886/article/details/83059315
https://www.cnblogs.com/wfsovereign/p/4186910.html
需求分析
假设小明有一天不小心把本地仓库的一个文件夹A推送到了远程GIT服务器(例如:github,gitlab,gitee)上,此时想删除远程仓库的文件夹A,但是本地又不想删除。小明于是去问小红,怎么办?小红不假思索的说,github,gitlab 不是可以删除吗?你直接在远程服务器上操作呀。小明告诉小红,你有所不知,远程操作只能操作单个文件,无法删除文件夹,你可不会傻到一个一个文件去删除。小红说,那怎么办呢?
解决办法
方法一
这里以删除 .setting 文件夹为案例
git rm -r --cached .setting #--cached不会把本地的.setting删除 git commit -m 'delete .setting dir' git push -u origin master
方法二
如果误提交的文件夹比较多,方法一也较繁琐
直接修改.gitignore文件,将不需要的文件过滤掉,然后执行命令
git rm -r --cached . git add . git commit git push -u origin master
下面是我的操作:
我的情况是:git已经提交了许多我不想提交的文件和文件夹,如:venv,1.py,demo开头的文件(之前不知道有gitignore这个功能)
所以现在需要做的是
当前我上传到github的项目目录结构如下,圈出的文件是我希望在本地保留,但git add .时不要上传到github的:
1.删除github上多余的文件
#删除单个文件夹 git rm -r --cached venv git commit -m 'delete venv dir' git push -u origin master
刷新github可以看到venv,1.py,demoTest文件已经被删除了
2.在项目 根目录 下创建.gitignore文件,创建ignore规则(希望哪些文件不交给git管理呢?)
gedit .gitignore
.gitignore的内容这样写
venv 1.py demo*
linux环境下 文件前带.表示该文件是隐藏文件
使用ls -al命令查看该文件已被成功创建
具体gitignore的配置规则参照:
https://www.cnblogs.com/kevingrace/p/5690241.html
3.测试ignore规则是否生效
git check-ignore -v venv git check-ignore -v 1.py git check-ignore -v demoTest.py
如下图所示,这样就表示ignore文件配置可以匹配到我们不希望交给git进行版本控制的文件或文件夹了
4.测试ignore配置生效后,push代码到github
可以看到本地项目文件内容如下:
但这次git add . 只将.gitignore文件提交给git进行了版本控制
5.检查上传到github的项目是否忽略了venv文件夹,1.py,demoTest.py
这次只把.gitignore文件上传到github了