常用常见的 - 线上回滚

  • 作者:KK

  • 发表日期:2018.10.12


要点速读

  1. git reflog --date=iso查看服务器的版本变化记录,从上到下找到你需要的还原点(一般是上面第2条记录)。

  2. 复制那条记录最左边的日志版本号(比如下面示例内容的18edb15)。

  3. 执行git reset --hard 18edb15


正文

如果上线的代码运行出了问题,当然就想着把代码还原成上一个版本的啦。

在服务器上执行git reflog --date=iso会列出你服务器代码版本的变更记录(比如服务器上的仓库每更新一次算一个记录),内容像下面这样:

0222535 HEAD@{2018-09-22 17:44:52 +0800}: pull : Fast-forward
18edb15 HEAD@{2018-09-22 14:03:27 +0800}: pull : Fast-forward
c542072 HEAD@{2018-09-13 18:13:15 +0800}: pull : Fast-forward
6b7bb56 HEAD@{2018-09-11 20:53:23 +0800}: pull : Fast-forward
43a2946 HEAD@{2018-09-10 10:41:58 +0800}: pull : Fast-forward
3cf84e9 HEAD@{2018-09-08 19:17:14 +0800}: pull : Fast-forward
42cce7c HEAD@{2018-09-08 19:09:26 +0800}: pull : Fast-forward
e6f32a5 HEAD@{2018-09-08 08:58:22 +0800}: pull : Fast-forward
cd7709f HEAD@{2018-09-07 11:36:08 +0800}: pull : Fast-forward

最顶上第一行就是最近的变更记录,最左边的 0222535 就是一个版本号的缩写,比如这是刚上线的更新,我们其实要找的是第2条 18edb15 ,而且你也能从时间上看出哪个是你刚才更新的,哪个是上一次更新的。

复制版本号,然后执行git reset --hard 18edb15就可以还原到 18edb15 对应的版本了。


其它

  • 对我这种总是在中小企业打混的人来说,大多数应用在单台服务器上就好好,要是多台服务器均衡负载那你就想想怎么弄个脚本或者找个工具批量处理吧。

  • 平时许多操作中我们都认识到 git 的版本号是一串很长的hash,其实上面那个短的版本号也是有效的,你执行git log $短hash版本号这样能查询到这个版本号的长hash版本号,以及它的相关日志。

  • 建议上网查一下关于reset子命令的软重置、硬重置等操作。

  • reflog命令列出的日志是这样的意思:假设该仓库原来是版本20(我在线上角度说),然后线下提交了21、22、23共3个版本,然后线上开始 pull 更新代码,一下子从20变成了23,那reflog就会列出20、23的记录,从20更新到23就有了2次版本的引用记录,就这么理解好了。