3

问题描述

  • 某些情况下,我们在写代码的过程中,一直在本地不断地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...

水冗水孚
1.1k 声望588 粉丝

每一个不曾起舞的日子,都是对生命的辜负