这是工作中遇到的问题,记录下来,也方便自己后面查看操作步骤,也方便各位遇到这个问题,不至于卡太久。

首先切换到主分支,这里以图中ejob项目为例。

gitlab仓库里面根据最近的提交代码记录恢复代码 gitlab代码回滚_git


切换到主分支后,打开ejob项目的git历史记录。

gitlab仓库里面根据最近的提交代码记录恢复代码 gitlab代码回滚_历史记录_02


例如图中,从当前位置准备回滚到指定位置,右键选择Reset Current Branch to Here...。(注意:操作前要确认代码有没有备份,其他分支或者本地有没有,别到时候回滚后,代码没了,没备份就难搞了)

gitlab仓库里面根据最近的提交代码记录恢复代码 gitlab代码回滚_gitlab_03


点击后会出现一个弹窗,选择Hard。只有选择hard才会删掉之前所有的记录。

gitlab仓库里面根据最近的提交代码记录恢复代码 gitlab代码回滚_回滚_04


点击Reset后,就会发现git的历史记录,回滚位置之前的记录都不见了。

因为GitLab会保护主分支,如果我们直接push,是会出问题的,所以我们应该先关掉GitLab中,对ejob项目主分支的保护。

打开GitLab的ejob项目页面,选择Setting

gitlab仓库里面根据最近的提交代码记录恢复代码 gitlab代码回滚_idea_05


然后选择Protected branches,点击Unprotect,就会把主分支的保护删除掉。(可以恢复,放心操作)

gitlab仓库里面根据最近的提交代码记录恢复代码 gitlab代码回滚_git_06


点击后,那条保护没了,说明操作成功。

gitlab仓库里面根据最近的提交代码记录恢复代码 gitlab代码回滚_idea_07


因为当我们使用git的push操作时,git会默认pull把远程的内容拉取下来,所以我们需要通过命令git push -f推到主分支,加上-f就push的时候就不会进行pull操作。但是由于IDEA的push是没有-f的操作,所以我们是需要通过命令来执行的。然后回到IDEA中,打开底部Terminal窗口(直接打开项目的文件夹,右键点击Git Bash Here也是可以的),然后进入ejob项目的文件夹。

gitlab仓库里面根据最近的提交代码记录恢复代码 gitlab代码回滚_回滚_08


输入git push -f提交。

然后我们就可以到GitLab的ejob项目主分支看历史记录,如果提交记录最新到我们现在的回滚位置,那么说明回滚成功。

然后我们再把主分支的保护开启。

gitlab仓库里面根据最近的提交代码记录恢复代码 gitlab代码回滚_历史记录_09


选中master后,点击Protect恢复对主分支的保护。

gitlab仓库里面根据最近的提交代码记录恢复代码 gitlab代码回滚_idea_10


到此为止,就完成对主分支的回滚。