赞
踩
真实场景: 项目需求马上准备上线了,所以提前将需求版本分支合并(merge)到了主分支(master),然后打了版本 Git Tag(v1.0.1),上一个版本 Git Tag 是 v1.0.0,这个时候突然通知我说这个版本影响太大,现在用户使用频繁,为了保证稳定性,延迟到下月中旬上线。但是为了后续其他需求的开发,必须保证主分支(master)还是之前的代码(v1.0.0的代码),所以我只能回退(reset)版本了。然后就出现了回退失败的问题,下面是我执行的步骤:
git show v1.0.0 // 拿到commit 672f634aa52215
git reset --hard 672f634aa52215 // 执行回退
git push -f // 强制推送到远端
出现的错误提示:
remote: GitLab: You are not allowed to force push code to a protected branch on this project.
To git.********.git
! [remote rejected] master -> master (pre-receive hook declined)
错误:无法推送一些引用到 '*************.git'
这个错误的意思,当前的分支受保护,当你强制推送的时候是无法成功的。(我还试着新建了一个新分支,新建分支是可以强制推送的,但是merge到主分支时,主分支不承认更改的内容,所以失败了,,,)
查阅资料后,发现是 gitlab 设置了主分支保护,所以我做了下面的更改:
gitlab路径:项目/Settings/Repository/Protected Branches
大家看,这里对master做了分支保护。怎么解决呢?直接点击该分支旁的 Unprotect 按钮,就解除保护了,然后我又在本地主分支上,再次执行 git push -f
就成功了。
但是为了避免后续出现问题,建议重新设置主分支(master)保护。
大家还有什么更好的办法呢?欢迎在评论区讨论。。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。