取消分支保护后仍无法执行git push -f强制推送问题求助
Git强制推送回退提交遭钩子拒绝的解决办法
问题详情
推送错误commit到远程GitLab仓库后,我想回退到上一个远程提交,于是执行了本地回退+强制推送操作:
C:\Users\ul340\PRACTICE_GIT\beagle_pft_test>git reset HEAD~ C:\Users\ul340\PRACTICE_GIT\beagle_pft_test>git push -f
虽然已经在仓库的「允许推送」区域添加了自己的用户名:

但执行后触发错误:
Total 0 (delta 0), reused 0 (delta 0) remote: Value of exclude_branches is trial dev dummy remote: GL-HOOK-ERR: Error during Change Package Creation - remote: GL-HOOK-ERR: ****** remote: error: hook declined to update refs/heads/master To https://gitlab.com/beagle_pft_test.git ! [remote rejected] master -> master (hook declined) error: failed to push some refs to 'https://gitlab.com/beagle_pft_test.git'
补充说明:排除分支的下拉菜单为空,但仍然提示分支受保护无法操作:
解决途径
1. 排查仓库自定义钩子
错误里的GL-HOOK-ERR是GitLab自定义预接收钩子的报错,说明仓库配置了额外的推送校验逻辑:
- 找仓库管理员查看钩子代码,确认是否拦截了
master分支的强制推送操作——即使你在「允许推送」列表,钩子可能有独立的权限或规则校验 - 注意到钩子输出里的
exclude_branches是trial dev dummy,而master不在排除范围内,所以触发了钩子的校验流程
2. 用反向提交替代强制推送
如果无法修改钩子规则,推荐用git revert生成新提交抵消错误更改,这种方式不修改历史,不会触发分支保护拦截:
# 生成撤销上一个提交的新commit git revert HEAD # 推送新的撤销提交到远程 git push
3. 检查分支保护的完整规则
即使你在允许推送列表里,GitLab分支保护可能还有其他限制:
- 进入仓库分支保护设置,找到
master分支的规则,确认是否勾选了「允许强制推送」选项 - 检查权限等级要求,部分仓库强制推送需要维护者及以上权限,普通开发者即使在允许推送列表也无法执行
内容的提问来源于stack exchange,提问作者tadm123
相关产品推荐
相关产品推荐

