记一次自己手残提交了很多还没写完的代码到线上,然后第一次回滚代码…
本地回滚代码我已经是经常干了,我习惯用
git reset --soft HEAD^
// 撤销本地最近的一个 commit,会改变代码
git reset --hard HEAD^
// 改变 commit HEAD 指向,代码不改变
其实这里的 HEAD^
是指上一个 commit id,这里也可以用 commit id 代替。
执行 git log
就能看到了,不想输入这么长的话,输入前面开头 7 位也是可以的。
这是没有 push 到线上的,那么已经 push 上去该怎么破呢?
git reset –soft HEAD~1
# 回滚一个 commit,也可以用 git reset --soft HEAD^
git push origin master --force
# 强制 push 到 origin 的 master 分支上,也就是强制 push 到线上
没错,就是这么简单一般来说到这里就成功了。不过我们仓库是基于 GitLab 搭建的私有仓库,于是我这边踩到一个小坑,push 的时候报错了
$ git push origin master --force
remote: GitLab: You are not allowed to force push code to a protected branch on this project.
To test.zmide.cn:demo/test.git
! [remote rejected] master -> master (pre-receive hook declined)
error: Push some references to 'test.zmide.cn:demo/test.git' Fail
它说不允许你将代码强制推送到此项目上受保护的分支,需要到私有仓库的 web 端设置一下,具体操作如下:
将你想要回滚代码的分支取消一下保护就好了。