问题描述
- 某些情况下,我们在写代码的过程中,一直在本地不断地
add、commit - 并没有
git push到远端服务器 - 因为一些原因,我们需要跳转到某个
commit版本去操作 - 即回退
git的本地commit - 本文记录一下,两种方式的回退
若是提到远端的代码,要回退回滚,可以参考笔者的这篇文章(本篇文章是本地的回退,回滚):juejin.cn/post/710022…
场景假设
- 我本地
add commit提交了三次 - 三次分别对应的是
111 222 333这三个文件 - 我通过
git log查看这几次的add和commit,如下两图:
对应的操作文件
git log日志
- 需求假设,我需要跳转到第一次本地提交的时候,即有且只有111文件的时候,去做一些操作
方式一 git reset --hard 某次提交的哈希值
- 我们通过
git log能查看到每一次的提交的哈希值 - 直接
git reset --hard db0d2eb6就能切换到第一次的commit版本(哈希值取前8位就行了,不用所有) - 当然做这个操作之前,建议切一个新的备用分支
哈希值不用加引号,错误方式:
git reset --hard 'db0d2eb6'
如下是操作方式图解:
我们可以通过 git log -g 去查看所有的git操作记录,这样就可以git reset --hard 哈希反复横跳了,如下图:
方式二 git checkout 某次提交的哈希值
- 首先用
git log -g查看所有的commit - 然后再
git checkout 某次提交的哈希值 - 类似上述操作,当然建议新切一个分支,留作备用
方式三 git revert 某次提交的哈希值
- 首先用
git log -g查看所有的commit - 然后再
git revert 某次提交的哈希值去撤销这一次的commit(会出现vim让我们填写撤销原因,直接:wq即可) - 假如有
多次commit,那么多次revert撤销即可 - 有一个优点就是git的日志log也会记录撤销
revert的操作记录 - 比如有
111、222、333,撤销一次,变成111、222,再撤销就变成111了 - 类似上述操作,当然建议新切一个分支,留作备用
A good memory is better than a bad pen. Write it down...