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从版本库中删除了

相关推荐
woxihuan1234566 小时前
如何处理MongoDB副本集中节点IP变更_rs.reconfig强制更新配置矩阵
jvm·数据库·python
m0_470857646 小时前
如何制作并发布自己的phpMyAdmin主题_主题结构解析与打包分享的开发者指南
jvm·数据库·python
2303_821287386 小时前
怎么在MongoDB中追踪一个Document的具体流转路径_从Chunk分布到迁移历史日志分析
jvm·数据库·python
重生之小比特6 小时前
【MySQL 数据库】视图
数据库·mysql
weixin_459753946 小时前
mysql如何批量重置数据库用户密码_MySQL批量修改密码Shell脚本
jvm·数据库·python
AC赳赳老秦6 小时前
OpenClaw与飞书多维表格联动:自动同步工作数据、生成统计图表,实现高效管理
java·数据库·python·信息可视化·飞书·deepseek·openclaw
黑贝是条狗6 小时前
注册表破解chrome,edge阻止浏览器连接本地websocket
前端·javascript·数据库
爱喝水的鱼丶6 小时前
SAP-ABAP:第二篇:实操避坑篇——ABAP Hello World程序创建、语法校验到调试运行全流程指南
运维·服务器·数据库·学习·sap·abap
m0_609160496 小时前
mysql如何避免大批量数据修改锁全表_使用分批提交技术
jvm·数据库·python
Languorous.6 小时前
MySQL 零基础安装教程(Windows11/10,图文分步,新手零失败)
数据库·mysql·adb