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

相关推荐
fengxin_rou1 小时前
一文读懂 Redis 集群:从哈希槽到透明访问
java·数据库·redis·算法·spring·缓存
m0_635647481 小时前
Qt开发与MySQL数据库教程(二)——MySQL常用命令以及示例
java·开发语言·数据库·mysql
顶点多余1 小时前
数据库——对表的操作
数据库
程序员榴莲2 小时前
MySQL (一):MySQL的安装与启动
数据库·mysql
咖啡の猫2 小时前
Redis 通用命令
数据库·redis·bootstrap
不做超级小白2 小时前
Git大小写陷阱:当README.md遇上readme.md
linux·windows·git
IT界的老黄牛2 小时前
【IT老齐230 笔记 + 思考】金融业容灾方案“两地三中心“是什么意思?
数据库·笔记·架构
aiAIman2 小时前
OpenClaw 用户必修课:(三)Claude Code 单一聊天原则、Hooks 与 LSP
数据库·人工智能·开源·aigc
oradh2 小时前
Oracle单库环境下计划内启停数据库的步骤
数据库·oracle