码云gitee+git入门篇(三)——删除、回退

书接上回:码云gitee+git入门篇(二)——代码托管
继对在码云上进行代码托管的简单介绍之后,这篇博客主要介绍一点git的删除和回退操作=.=。
说明:这里使用的代码托管方式是码云gitee+git入门篇(二)中的第2种简单方式。

一、删除文件、文件夹

1.删除文件,执行命令:

git rm 想要删除的文件的名字及其后缀

码云gitee+git入门篇(三)——删除、回退_第1张图片

可以看到在本地代码仓库testGit1中有三个文件,README.md、test1.txt和test2.txt,删除文件test1.txt,
但是如果不加文件后缀的话,会发现提示匹配不到文件,所以必须给全名
之后可以发现本地仓库已经没有这个文件了,但是刷新远程仓库会发现,这个文件依然存在,
这是因为在本地仓库改动过后,没有将现在的状态同步到远程仓库,所以需要执行一下commit和push命令:

git commit -m "对本次提交的描述信息"
git push

现在刷新远程代码仓库,可以看到文件test1.txt被成功的删除了。
这里写图片描述

2.删除文件夹,执行命令:

git rm 想要删除的文件夹的名字 -r

码云gitee+git入门篇(三)——删除、回退_第2张图片

可以看到在本地代码仓库testGit1中有一个名为test的文件夹,直接使用删除文件的命令无法删除文件夹,
会提示错误“not removing ‘test’ recursively without -r”,可以先执行一下git rm -help命令查看rm命令的使用详情,
其中添加-r表示允许迭代移除,所以git rm test -r可以删除test文件夹,之后执行commit和push操作即可,同上。

二、找回误删文件、文件夹

git对于版本的管理本质是对提交的管理,所以在每个操作后最好提交一下,便于之后需要回退,例如要找回上面操作中误删的文件test1.txt。

1.如果你现在正在进行某些更改,需要先推送远程仓库,否则回退之后,最新状态的内容就没有了。

2.执行命令:

git log

这个命令会显示出提交日志,可以看到有一个增加了2个文件(test1.txt和test2.txt)的提交和删除test1.txt的提交:
码云gitee+git入门篇(三)——删除、回退_第3张图片

每个提交都有自己的唯一标识,所以想要找回文件test1.txt,需要回退到提交删除操作的前一个状态,所以这里是回退到添加文件状态,执行命令:

git reset --hard 需要回退到的状态的commit标识号

这里写图片描述

该命令的原理:git有个指向当前版本的HEAD指针,执行回退操作本质上是git把HEAD指针从当前状态指向想要回退到的状态,
所以回退的速度很快,需要回退到哪里,就让HEAD指向哪里就行,
可以看到提示说HEAD已经处于添加文件的状态了,此时查看文件也可以看到test1.txt文件。

3.如果在这个状态和最新状态之间又提交过很多文件,需要手动把这个找回的test1.txt文件拷贝出去一份,
再执行reset命令回到最新的状态:

git reset --hard 最新状态的commit标识号

4.最新状态是没有刚刚找回的这个文件的,把test1.txt文件拷贝进本地仓库中,然后推送到远程仓库即可,执行命令:

git add .
git commit -m "对本次提交的描述"
git push

这样就可以既找回了之前误删的文件,又没有丢掉中间状态的很多文件。
找回误删的文件夹和找回误删的文件操作完全相同,因为git不会识别你找回的是什么,只是回退到相应的状态而已。

过程示意图:

commit:1——>commit:2——>commit:3——>commit:4——>commit:5
                           误删                    最新状态

当你想要找回删除的文件的时候,先保存现在的状态即最新状态commit:5,然后回退到误删的前一个状态也就是commit:2,
这时候可以获取到已经删除的文件,把它拷贝出去保存一份,然后回到最新状态commit:5,
该状态下是没有已经删除的文件的,但是刚刚我们找到了它并拷贝了一份,现在把这个文件再拷贝进来到本地仓库中,
然后执行提交推送操作,会产生一个新的commit状态,这个就是在commit:5的基础上找回已删除文件后产生的最最新的状态。

你可能感兴趣的:(IntelliJIDEA)