问题描述
- 某些情况下,我们在写代码的过程中,一直在本地不断地
add、commit
- 并没有
git push
到远端服务器 - 因为一些原因,我们需要跳转到某个
commit版本
去操作 - 即回退
git
的本地commit
- 本文记录一下,两种方式的回退
若是提到远端的代码,要回退回滚,可以参考笔者的这篇文章(本篇文章是本地的回退,回滚):https://segmentfault.com/a/1190000041878398
场景假设
- 我本地
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...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。