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 不能添加到暂存区的删除操作。

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

猜你喜欢


评论

There are no comments yet.
未登录

登录后即可发表评论

登录或注册

标签

AdSense Anaconda Android apache API apt Auth AWS B-tree Bandwagon Blog bower brew bytes Caffe Catalina certbot Charles cloudcone Composer conda CoreML CPU crontab CSS csv Cuda cv2 datetime Digitalocean DNS Docker Docker-Compose Eloquent Excel export Flask FTP GET Git GitHub GitLab Gmail GoDaddy Google GTM hash Homebrew Homestead HTML http HTTPS IDEA image imagemagick imagick imgick import InnoDB ios iou iPhone ISO8601 iTerm2 Java JavaScript JPG JS Keras Laravel Laravel-Admin lazyload Linux list Livewire lnmp load logs Lravel Mac Markdown matplotlib md5 mix MobileNet Mojave mongo MongoDB MySQL Namesilo Nginx Node npm numpy Nvidia Nvidia-Docker onevps OpenCV Openpose openpyxl oss Outline parse PayPal PHP php-fpm PhpStorm PHP扩展 PIL Pillow pip PNG POST Protobuf PyCharm pyenv pymongo Python Python,人工智能,机器学习,VOC,xml Queue Redis requests RGB Sanctum save selenium SEO Shadowsock Shadowsocks ShadowsocksR simplemde Spring Boot SQLServer ssd SSH ssl SSL证书 SSR str Sublime sudo swap Swift Tensorflow TensorflowLite Terminal Terminator timestamp Ubuntu urllib UTC v2ray Valet Validation Validator VienBlog virtualenvs VPN VPS Vultr Web Windows WordPress Xcode xlsx yaml YAPI YUV zip zmq zsh 上网 下载图片 主从同步 云主机 云存储 云开发 云服务器 人工智能 代码管理 优化 优惠码 伪原创 作弊与反作弊 免费ss账号 免费提现 切片 前端 加密 协议 博客 友链 双击事件 后台运行 后端 命令 国内镜像源 图标 图片操作 图片转换 域名 多身份认证 大小写转换 姿态检测 安卓模拟器 安装 定时任务 定时执行 密码 密钥 导出导入 小程序码 延迟加载 异常 微信 微信小程序 快捷方式 慢查询 懒加载 提现 搜索引擎 搬瓦工 搭梯子 教程 数据库 数据重复 文件上传 无法登录 日志 日期 时区 时间 时间戳 服务器 机器学习 权限 梯子 模拟浏览器 港版支付宝 漏洞 爬虫 生活服务 用户管理 病毒 登录 目标检测 科学上网 系统升级 索引 组件 组件开发 编辑器 自动付款 自定义组件 英文伪原创 计划任务 计算机视觉 订阅通知 认证 语法 读写分离 远程仓库 远程连接 配置文件 重定向 错误异常 错误提示 队列 阿里云 香港 香港手机号
亲情非友情链接