git rm 删除文件,同时还将这个删除操作记录下来
rm删除文件,仅仅是删除了物理文件,没有将其从git的记录中剔除
工作区和暂存区、分支都删除
git rm readme.txt
git commit -m 'delete readme.txt'
git push
rm readme.txt
git commit -am 'delete readme.txt '
git push
暂存区和分支删除,工作区不删除(也是放弃追踪的操作)
git rm --cached readme.txt
git commit -m 'delete remote readme.txt'
git push
git rm --cached readme.txt
或者可以列出文件或者目录的名字,也可以使用glob模式,例如:
git rm log/*.log
注意到星号 * 之前的反斜杠 ,因为 Git 有它自己的文件模式扩展匹配方式,所以我们不用 shell 来帮忙展开(译注:实际上不加反斜杠也可以运行,只不过按照 shell 扩展的话,仅仅删除指定目录下的文件而不会递归匹配。上面的例子本来就指定了目录,所以效果等同,但下面的例子就会用递归方式匹配,所以必须加反斜杠。)。此命令删除所有 log/ 目录下扩展名为 .log 的文件。类似的比如:
git rm *~
会递归删除当前目录及其子目录中所有 ~ 结尾的文件。
在使用git的时候,有些文件是不需要上传的,所以就可以修改 .gitignore
例如:
如果是对所有文件都取消跟踪的话,就是
git rm -r --cached . //不删除本地文件
git rm -r --f . //删除本地文件
对某个文件取消跟踪
git rm --cached readme1.txt 删除readme1.txt的跟踪,并保留在本地。
git rm --f readme1.txt 删除readme1.txt的跟踪,并且删除本地文件。
然后git commit 即可。但是git status查看状态时还是会列出来
每次使用git status 查看状态时总是会列出被跟踪的文件,可以通过 .gitignore文件来达到目的
在git init 的目录下建立.gitignore文件,git官方提供的有 该文件,可以加以修改使用
例:
这样被滤掉的文件就不会出现被上传
.gitignore 还可以指定将哪些文件添加到版本管理中:
在上面的语法前面加上 ! 即可
千万要注意:
如果你在创建.gitignore文件之前就已经push项目了,那么即时你在.gitignore文件中写入新的规则,这些规则也不会起作用。
有时候在项目开发过程中,突然心血来潮想把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
如果还是不行的话
在先将想要取消追踪的文件移到项目目录外),并提交,然后提交后再将刚刚移出的文件再移入项目中即可
注意:
不要误解了 .gitignore 文件的用途,该文件只能作用于 Untracked Files,也就是那些从来没有被 Git 记录过的文件(自添加以后,从未 add 及 commit 过的文件)。
如果文件曾经被 Git 记录过,那么.gitignore 就对它们完全无效。