一、简介
在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 提交就可以了。
若您感觉本站文章不错,读后有收获,不妨赞助一下?
我要赞助