1. 问题描述
如上图所示,在已存在.gitignore
文件且已经提交过的Git
管理的项目中,其中.class
、.jar
文件以及.idea
目录内的内容全部都还是被Git
管理了,可见.gitignore
文件并没有生效。
2. 原因发现
.gitignore
文件只能作用于 Untracked Files
,也就是那些从来没有被Git
管理过的文件,如果某些文件已经被纳入了版本管理中,则新增或者修改.gitignore
文件是无效的。
3. 解决方案
为了保险起见,建议先在本地仓库进行一次git pull
,目的是与远程仓库同步,然后再在本地新建并切换到新分支,我命名为hotfix
。
git pull origin master
git checkout -b hotfix
第一步:先将暂存区的文件删除(即全部变为未被追踪状态)
git rm -r --cache .
如上图所示,执行完第一步的bash
代码以后在IDEA
中可以发现,所有文件都变为了红色(未被追踪状态)。
第二步:添加或者修改正确的.gitignore文件
在与.git
文件的同级目录下添加.gitignore
文件。
# Compiled class file
*.class# Log file
*.log# BlueJ files
*.ctxt# Mobile Tools for Java (J2ME)
.mtj.tmp/# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rarhs_err_pid*.classpath
.project
.settings
target
.idea
*.iml
第三步:再将本地所有文件添加至暂存区
git add .
第四步:切换到master
分支,再将hotfix
分支的内容合并到master
分支
git checkout master
git merge hotfix
第五步:推送至远程仓库
git push origin master
推送完以后,通过git status
指令查看本地库的状态,发现本地库很干净。再到Github
仓库中查看文件,发现以前推送的.class
、.jar
文件都被删除了,在本地修改文件时,.class
、.jar
文件以及.idea
目录内的内容也都不再被Git
管理了🎉🎉🤣。