记一次手贱的git reset

1,040 阅读2分钟

「这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战

说来惭愧,本人到现在都不太会回滚。 某天写页面,结果页面卡死了,又找不到原因,就想回滚。因为改动的地方关联的文件较多,不然我就直接手动回滚了。

鄙人用的是git extension 因为它有中文模式,在我回滚时,给了我四个选项

image.png

我果断选择了,保持。 结果,就执行了命令 git reset --keep 后面是提交记录的id

虽然我也不知道啥意思,但是肯定比硬模式要好吧。 然后,我就发现,找不到之前的提交记录了。 慌了。。。。

挽救手贱的git reset

经查找,发现 git reflog 这个命令可以显示全部的历史提交。

image.png

然后再次 使用 git reset --keep id

果然,我的提交又回来了。

image.png

对于回滚的一点点理解

仔细看了看文章,应该用链表的思想来理解它。 把git commit 看做是一个节点,那么这些节点就构成了一个链表, 链表分支就成了树。

还是说单个分支吧,单个分支就是一个单链表,我们最新的提交记录是头结点, 这样就能通过头结点找到后续全部节点, git reset 这个命令就是把头结点的指针移动到了我们指定的commit 上, 因为是单向链表,此回滚之后,看不到前面的提交了, 再次运行git reset --keep id 又把指针移动到了我之前的最新提交上,所以我又能看见全部的提交记录了。 这种方式就是只移动索引,不会增加新的提交记录,也不会删除以前的提交记录。

最后

所以,写了代码先提交再说,不小心回滚了也不要慌,运行 git reflog 查看全部历史记录。