Git_原理及使用_撤销修改_删除文件

✨✨ 欢迎大家来到小伞的大讲堂✨✨

🎈🎈养成好习惯,先赞后看哦~🎈🎈

所属专栏:Git原理与使用**
小伞的主页:xiaosan_blog**

gitee:许星让 (xu-xingrang) - Gitee.com****

制作不易!点个赞吧!!谢谢喵!!

1. 撤销修改

情况一:对于工作区的代码,还没有add

你当然可以直接删掉你目前在工作区新增的代码,像这样:

bash 复制代码
kexiye@kexiye-VMware-Virtual-Platform:~/git$ cat ReadMe 
version1
version2
version3

no add ------------------添加的
kexiye@kexiye-VMware-Virtual-Platform:~/git$ git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git restore <文件>..." 丢弃工作区的改动)
	修改:     ReadMe

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

直接删除代码即可

kexiye@kexiye-VMware-Virtual-Platform:~/git$ cat ReadMe 
version1
version2
version3
kexiye@kexiye-VMware-Virtual-Platform:~/git$ git status
位于分支 master
无文件要提交,干净的工作区

幸亏我们工作效率不高,才写了一行代码就发现不行了,要是你写了3天,一直都没有提交,该怎么删掉呢? 你自己都忘了自己新增过哪些,有同学说,我可以 git diff xxx一下,**看看差别在删啊,****那你肯定又要花3天时间删代码了,并且很大的概率还会改出bug。**一周过去了,你怎么向你的老板交代呢?

Git其实还为我们提供了更好的方式,我们可以使用git checkout -- [file] 命令让工作区的文件回到最近一次 add 或 commit 时的状态。 要注意 git checkout -- [file] 命令中的--很重要,切记不要省略,一旦省略,该命令就变为其他意思了,后面我们再说。示例如下:

bash 复制代码
kexiye@kexiye-VMware-Virtual-Platform:~/git$ cat ReadMe 
version1
version2
version3

add in this ----------------新增代码
kexiye@kexiye-VMware-Virtual-Platform:~/git$ git checkout -- ReadMe

kexiye@kexiye-VMware-Virtual-Platform:~/git$ cat ReadMe 
version1
version2
version3

情况二:已经add,但没有commitadd后还是保存到了暂存区呢?怎么撤销呢?

bash 复制代码
kexiye@kexiye-VMware-Virtual-Platform:~/git$ vim ReadMe 

kexiye@kexiye-VMware-Virtual-Platform:~/git$ cat ReadMe 
version1
version2
version3

add in this

kexiye@kexiye-VMware-Virtual-Platform:~/git$ git add ReadMe 
kexiye@kexiye-VMware-Virtual-Platform:~/git$ git status
位于分支 master
要提交的变更:
  (使用 "git restore --staged <文件>..." 以取消暂存)
	修改:     ReadMe

让我们来回忆一下学过的 git reset 回退命令,该命令如果使用--mixed 参数,可以将暂存区的内容退回为指定的版本内容,但工作区文件保持不变。那我们就可以回退下暂存区的内容了!!!示例如下:

bash 复制代码
kexiye@kexiye-VMware-Virtual-Platform:~/git$ git reset HEAD ReadMe
重置后取消暂存的变更:
M	ReadMe
kexiye@kexiye-VMware-Virtual-Platform:~/git$ git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git restore <文件>..." 丢弃工作区的改动)
	修改:     ReadMe

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

-----------------------------发现暂存区是干净的,工作区有修改

此时我们回到了情况一,此时我们 git checkout --

bash 复制代码
kexiye@kexiye-VMware-Virtual-Platform:~/git$ git checkout -- ReadMe
kexiye@kexiye-VMware-Virtual-Platform:~/git$ cat ReadMe 
version1
version2
version3

情况三:已经add,并且也commit了

不要担心,我们可以 git reset --hard HEAD^ 回退到上一个版本!不过,这是有条件的,就是你还**没有把自己的本地版本库推送到远程。**还记得Git是分布式版本控制系统吗?我们后面会讲到远程版本库,一旦你推送到远程版本库,你就真的惨了......

bash 复制代码
kexiye@kexiye-VMware-Virtual-Platform:~/git$ cat ReadMe 
version1
version2
version3

add in this
kexiye@kexiye-VMware-Virtual-Platform:~/git$ git add ReadMe 
kexiye@kexiye-VMware-Virtual-Platform:~/git$ git commit -m "modify"
[master 08d10ef] modify
 1 file changed, 2 insertions(+)

kexiye@kexiye-VMware-Virtual-Platform:~/git$ git reset --hard HEAD^
HEAD 现在位于 67fec9c version3
kexiye@kexiye-VMware-Virtual-Platform:~/git$ cat ReadMe 
version1
version2
version3

2. 删除文件

在 Git中,删除也是一个修改操作,我们实战一下,如果要删除 file5 文件,怎么搞呢?如果你这样做了:

bash 复制代码
kexiye@kexiye-VMware-Virtual-Platform:~/git$ ls
file1  file2  file3  file4  file5  ReadMe
kexiye@kexiye-VMware-Virtual-Platform:~/git$ rm -rf file5

但这样直接删除是没有用的,反而徒增烦恼,git status 命令会立刻告诉你哪些文件被删除了:

bash 复制代码
kexiye@kexiye-VMware-Virtual-Platform:~/git$ rm -rf file5
kexiye@kexiye-VMware-Virtual-Platform:~/git$ git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add/rm <文件>..." 更新要提交的内容)
  (使用 "git restore <文件>..." 丢弃工作区的改动)
	删除:     file5

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

此时,工作区和版本库就不一致了,要删文件,目前除了要删工作区的文件,还要清除版本库的文件。

一般走到这里,有两种可能:

  • 确实要从版本库中删除该文件
  • 不小心删错了

对第二种情况,很明显误删,需要使用**git checkout -- file**来进行恢复,很简单,我们刚学过(删除也是修改):

bash 复制代码
kexiye@kexiye-VMware-Virtual-Platform:~/git$ git checkout -- file5
kexiye@kexiye-VMware-Virtual-Platform:~/git$ ls
file1  file2  file3  file4  file5  ReadMe

对于第一种情况,很明显是没有删完,我们只删除了工作区的文件。这时就需要使用git rm将文件从暂存区和工作区中删除,并且 commit:

bash 复制代码
kexiye@kexiye-VMware-Virtual-Platform:~/git$ git rm file5
rm 'file5'
kexiye@kexiye-VMware-Virtual-Platform:~/git$ git status
位于分支 master
要提交的变更:
  (使用 "git restore --staged <文件>..." 以取消暂存)
	删除:     file5

kexiye@kexiye-VMware-Virtual-Platform:~/git$ ls
file1  file2  file3  file4  ReadMe
kexiye@kexiye-VMware-Virtual-Platform:~/git$ git commit -m "delete file5"
[master 051b573] delete file5
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 file5

现在file5从版本库中删除了

相关推荐
码出钞能力25 分钟前
apache-shardingsphere-5.5.3自定义分片算法
数据库
兜有米啦1 小时前
数据库第二次作业
数据库
nVisual2 小时前
机柜PDU安装位置与空间建模方案
大数据·网络·数据库·信息可视化·数据中心基础设施管理
weixin_6682 小时前
Cursor-superpowers插件用法
数据库·人工智能
NWU_白杨2 小时前
三种常用的数据存储技术
数据库·redis·mysql·sqlite
吃饱了得干活2 小时前
亿级订单表分库分表设计,从0到1全流程
java·数据库·面试
蓝创工坊Blue Foundry2 小时前
图片文字提取到 Excel:批量任务如何先定义要交付的字段
运维·服务器·开发语言·数据库·自动化·ocr·excel
Xu_youyaxianshen2 小时前
Git 零基础常用指令手册(Gitee / GitHub 通用 )
git·gitee·github
麦聪聊数据2 小时前
企业数据市场建设(三):API 化服务封装,让数据开箱即用、避免重复开发
数据库
脱胎换骨-军哥2 小时前
C++数据库存储引擎内核开发:B+树索引与MVCC并发控制的完整实现
数据库·c++·b树