git重置后,开发人员无法推送到受保护的分支

git重置后,开发人员无法推送到受保护的分支,git,gitlab,Git,Gitlab,有人能解释一下为什么我的团队成员在提交git reset命令后,无法将更改推送到主分支更改,而主分支更改将在几次提交后收回回购: git reset --hard (previous commit SHA) 这是在尝试git push后收到的错误: ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'git@xxxxx.com:xxx/xxxx.g

有人能解释一下为什么我的团队成员在提交git reset命令后,无法将更改推送到主分支更改,而主分支更改将在几次提交后收回回购:

git reset --hard (previous commit SHA)
这是在尝试git push后收到的错误:

 ! [rejected]            master -> master (non-fast-forward)
error: failed to push some refs to 'git@xxxxx.com:xxx/xxxx.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
分支master受到保护,因此只有开发人员+维护人员才能使用它

我的队友是有问题的Gitlab小组的成员,拥有开发人员特权,以前推动远程回购没有任何问题。我拥有维护者权限,也无法推送到受保护的分支,并收到了相同的错误

为了解决这个问题,我删除了分支保护,他能够强制推送git push-f的更改。 有人知道为什么在受保护的分支上此操作失败吗?

执行git reset命令后,您的本地分支位于远程分支的后面,不允许将远程分支直接推送到远程分支。如果还需要在远程分支上执行重置操作,则需要使用git push-f强制更新远程分支。或者,如果远程分支有一些本地分支没有的重要更改,那么您需要首先使用git pull,解决冲突,然后可以自由地推送到远程分支


在Github中,当一个分支的保护处于打开状态时,默认情况下,它不允许强制推送。在github repo的分支保护规则页面中有一个名为“允许强制推送”的选项。您可以启用此选项以允许强制推送受保护的分支。

提交编辑修改、重设基础、筛选器分支或分支指针移动重置需要强制推送。受保护的分支可防止强制推送:

在存储库中创建分支保护规则时,默认情况下,协作者无法强制推送到受保护的分支或删除该分支

由我强调-博士


您团队的一名成员移动了分支指针,因此他需要用力推动。这就是为什么您需要从分支中删除保护。

正如您所了解的,您不能强制推送到GitLab上受保护的分支。 发件人:

默认情况下,受保护的分支执行四项简单的操作:

它防止任何人用力推树枝。 因此,您的解决方案是:取消保护->强制推送->保护

更新

GitLab添加了新设置以启用强制推送保护:

导航到项目的设置>存储库。 展开受保护的分支,然后滚动以保护分支。 要允许所有具有推送访问权限的用户强制推送,请切换“允许强制推送”滑块。 GitLab现在在上启用了强制推送到受保护分支。 在自我管理的实例上,管理员可以选择禁用它,因此您需要与管理员联系。
查看更多详细信息

您可以尝试允许强制推送/删除:

存储库=>设置=>分支=>添加规则


允许强制推送选项在哪里?根据您的请求更新答案