git的删除操作
访问量:18643

一、简介

在git里面删除,主要涉及到的有:本地文件删除、本地+远程库文件删除、本地+远程分支删除、本地+远程标签删除,库的删除。关于分支、和标签的删除,可以参考“分支的使用”和“标签的删除”。在这里,主要说一下文件或目录的删除。

二、文件或目录删除

首先,我们需要了解我们通过rm命令删除文件,和我们通过git rm 删除的区别。

直接rm删除 仅仅是删除工作区中对应的文件或目录

git rm删除, 不仅仅删除工作区中对应的文件或目录,还把删除操作添加到暂存区中。

也就是说git rm删除,帮我们屏蔽了删除过程中有关暂存区的操作,因为针对直接rm命令删除后,还需要手动添加到暂存区。

备注:rm删除后,可以通过git add命令或是git rm命令将删除添加到暂存区。

如下图,git rm删除的直接到暂存区了。

如果使用git rm删除git未跟踪的文件,如删除dq.txt,就会报错:fatal: pathspec 'dq.txt' did not match any files。

所以:

如果删除git跟踪的文件,推荐使用git rm命令;

如果删除git未跟踪的文件,还是老老实实使用rm命令。

当然,仅仅执行git rm命令,并不代表在本地库中删除了,要想在版本库中删除,还是需要执行git commit 提交命令的。

比如想删除 page.html文件

 git rm page.html
 git commit -m "删除page.html"

然后,我们通过git log命令找到当前提交对应的tree对象,然后通过git cat-file,可以看到,当前版本库里面,已经没有了page.html 文件了

若想在远程库中,也删除文件,只需要执行git push命令即可。

三、如何仅仅删除版本库中的文件或目录

场景:把工作区某个IDEA的配置文件添加到git版本库里面了,如下,想仅仅是删除版本库里面的findme.xml,保留工作区里面的findme.xml。

这个时候还是需要使用git rm 命令,只是需要加上--cached参数即可。我们可以通过git rm --help,查看帮助文档,解释如下:

 --cached

           Use this option to unstage and remove paths only from the index. Working tree files, whether

           modified or not, will be left alone.

也就是说,git rm --cached只会删除暂存区的文件或是目标,并不影响工作区。然后,我们把暂存区的删除提交到版本库,也就意味着我们删除了版本库里面的某个文件或目录。

针对上面的删除findme.xml,执行如下命令:

git rm --cached findme.iml

然后,我们就可以看到,暂存区中findme.xml文件已经删除,但在工作区里面,它还是存在的。

然后执行git commit 提交就可以了。