Git教程第7篇-git rm删除文件与rm删除文件

2019-10-18 07:05:02   Git

关于文件删除,我们分两种情况,第一种是已经被Git追踪的文件,也就是暂存区中已经存在的文件,第二种是未被Git追踪的也就是暂存区中没有的文件。

针对第一种情况,我们使用git rm 文件名 删除,那么大家可能会问这个命令它做了一件什么事情呢,跟直接 rm 有什么区别。我们知道,工作区修改和添加文件之后,使用git add命令会把这些操作添加到暂存区中,然而git add添加的并不包含删除操作,所以有git rm这个命令,这个命令其实就是干了两件事情,第一件事就是跟rm一样的事情,删除文件,第二件事情就是将这个删除操作记录到暂存区,执行后,暂存区的那个文件也被删掉了。

那么如果已经被追踪的文件不小心用rm删除了,怎么办呢?

可以commit的时候加-a参数(-a 参数表示,可以将所有已跟踪文件中的执行修改或删除操作的文件都提交到本地仓库,即使它们没有经过git add添加到暂存区)

git commit -a -m 'delete file'

也可以再用git rm --cache 文件名删掉暂存区的内容(不加--cache也可以)

➜  learngit git:(master) touch test.txt
➜  learngit git:(master) ✗ git add test.txt
➜  learngit git:(master) ✗ rm test.txt
➜  learngit git:(master) ✗ git rm test.txt
rm 'test.txt'
➜  learngit git:(master) git status
On branch master
nothing to commit, working tree clean

针对第二种情况,其实也就是从来没有 git add 更没有 git commit 的 文件,那么直接用 rm 系统命令删除就好了,如果使用git rm反而会报错:

➜  learngit git:(master) touch test.txt
➜  learngit git:(master) ✗ git rm test.txt
fatal: pathspec 'test.txt' did not match any files

因为他在暂存区根本找不到这个文件,所以报错了。

上面提到了git commit-a参数,仔细读说明可以发现,使用对象是已经追踪的文件,所以注意,如果你有新的文件(未被追踪,也就是没有git add过),是无法通过这个参数一起提交的,所以千万不要以为使用git commit -am这个命令就连git add都可以省掉,一步搞定,万事大吉!有新文件的话,还是老老实实的先git addgit commit吧。

--cache 参数

git rm有个--cache,是这样说的:

--cached

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

           modified or not, will be left alone.

这个命令是删掉暂存区的东西,不会影响工作目录。

小提示

使用.gitignore去忽略一些文件的时候可能大家会遇到这种情况:文件以及被追踪了,甚至早都提交了,突然想忽略掉这个文件了。

然后,大家兴致勃勃的修改了.gitignore文件,然后提交了,以为万事大吉了。其实不然,暂存区和当前分支还都有这个文件,我们只有从暂存区删掉这个文件,并且连同修改后的.gitignore一起提交才可以。这就用到上面提到的--cache参数了,因为我们希望的是只删除暂存区的那个文件,而非连工作目录的一起删掉。所以这时候我们需要执行:

git rm --cache 文件名
git add .gitignore
git commit -m 'ignore file'

小结

本节我们主要讲的是git rm的用法,并且提到了几个场景。我们可以知道这个命令主要是操作暂存区的,处理 git add 不能添加到暂存区的删除操作。

vien.tech版权所有,允许转载,但转载请注明出处和原文链接: https://viencoding.com/article/228
欢迎小伙伴们在下方评论区留言 ~ O(∩_∩)O
文章对我有帮助, 点此请博主吃包辣条 ~ O(∩_∩)O

猜你喜欢


评论

There are no comments yet.
未登录

登录后即可发表评论

登录或注册

标签

AdSense Anaconda Android API Auth AWS B-tree Bandwagon Blog bower brew bytes Caffe Catalina cloudcone Composer conda crontab CSS Cuda cv2 datetime Digitalocean DNS Docker Docker-Compose export Flask GET Git GitHub Gmail GoDaddy Google GTM hash Homebrew Homestead HTML http HTTPS IDEA image imagemagick imagick imgick import InnoDB ISO8601 iTerm2 Java JPG Keras Laravel Laravel-Admin lazyload Linux list lnmp load logs Lravel Mac Markdown matplotlib md5 mix Mojave mongo MongoDB MySQL Namesilo Nginx npm numpy Nvidia Nvidia-Docker onevps OpenCV Openpose Outline parse PayPal PHP php-fpm PhpStorm PHP扩展 PIL Pillow pip PNG POST Protobuf PyCharm pyenv pymongo Python Queue Redis requests save selenium SEO Shadowsock Shadowsocks ShadowsocksR simplemde Spring Boot SQLServer SSH SSL证书 SSR str Sublime sudo swap Tensorflow Terminal Terminator Ubuntu urllib UTC v2ray Valet Validation Validator VienBlog virtualenvs VPN VPS Vultr Web Windows Xcode zip zmq zsh 下载图片 云主机 云服务器 人工智能 优化 优惠码 伪原创 作弊与反作弊 免费ss账号 免费提现 切片 前端 加密 协议 博客 友链 后台运行 命令 图片操作 图片转换 域名 大小写转换 安卓模拟器 定时任务 定时执行 延迟加载 懒加载 提现 搜索引擎 搬瓦工 搭梯子 教程 数据库 文件上传 日志 时区 时间戳 服务器 机器学习 梯子 港版支付宝 生活服务 科学上网 系统升级 索引 编辑器 自动付款 英文伪原创 计划任务 语法 远程连接 重定向 错误异常 错误提示 队列 阿里云 香港 香港手机号
亲情非友情链接