恢复 git reset --hard tag_name/commit/HEAD的误操作

最近一直在不断地使用git工具下code以及build code,在这过程中要不断的切branch和track远程branch以及切对应的tag,而在这这过程中我们会用到:git reset --hard tag_name来对版本进行切换,如果我们对reset前的那一版未保存或者push,我们误操作了该命令,在很多资料里说的都是–hard很危险有的说是不可逆操作,但是昨天我遇到这样的问题在导师的指导下才知道该命令是可逆的,下面我们来看看具体的:

举个例子说明操作过程:

//git需要提前安装,安装方法百度或者学些ProGit文档第一章,讲的很详细
$ git init  //在当前目录下建立本地git库
$ touch test.txt//建立测试文件
$ git add test.txt
$ git commit -m "initial commit" //也可以使用`git commit .`来代替add和commit -m这两步
$ echo 'touch test.txt' >> test.txt
$ git commit -a -m " add to test"//一次性提交到本地git库中

使用git log命令产看一下提交历史:

//git log -param,很多参数如-s -p等可以使用
$ git log
* 74abca4 (HEAD, master)  add to test
* 8f0b801 initial commit

这里我们可以来一次git reset --hard tag_name/commit_id看一下:

$ git reset --hard 8f0b801
$ git log
* 8f0b801(HEAD, master) initial commit

我们退回到前一个版本了,之前的操作被抹去了,没法再直接切回去了,但是不要怕,git还有一个命令就是防止这种现象的,那就是git refloggit reflog就是用来记录你之前所有提交的历史,他的记录很简单那就是commit_id以及提交信息记录,但是有了这两个就够了,我们可以找回我们丢失的东西了,下面我们卡看具体操作:

$ git reflog
712c2ab HEAD@{0}: reset: moving to 8f0b801
74abca4 HEAD@{1}: commit: add to test
8f0b801 HEAD@{2}: commit (initial): initial commit

有了之前所有操作的commit以及提交信息我们就能找到我们要找的版本了,确认了我们要找的就是74abca4这一版,那么我们接下来就可以切换了,下面我们看一下命令:

$ git reset --hard 74abca4//在`git reset --hard`切回去

再来看一下 git 记录:

$ git log
*74abca4 (HEAD, master) add to test
*8f0b801 initial commit

这样我们的reset前的版本就算是找回了,git reset后想找回得在git没有清理前找回,这个清理时间大概是一个月以后了,所以想找回必须在这之前。

猜你喜欢

转载自blog.csdn.net/magiclyj/article/details/81475601