✨✨ 欢迎大家来到小伞的大讲堂✨✨
🎈🎈养成好习惯,先赞后看哦~🎈🎈
所属专栏: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从版本库中删除了
