尝试推送时出现 Git 错误 -- 预接收钩子被拒绝

Git error when trying to push -- pre-receive hook declined

提问人:Dave 提问时间:11/3/2011 最后编辑:1615903Dave 更新时间:2/11/2023 访问量:1194090

问:

当我尝试推送我提交的更改时,出现以下错误...

git.exe push -v --progress  "origin" iteration1:iteration1

remote: *********************************************************************
To ssh://git@mycogit/cit_pplus.git
! [remote rejected] iteration1 -> iteration1 (pre-receive hook declined)
error: failed to push some refs to 'ssh://git@mycogit/cit_pplus.git'

这是怎么回事?

git

评论

10赞 rob mayoff 11/3/2011
预接收钩子 mycogit 中有什么?
0赞 Adam Fowler 9/26/2015
你不会试图将大文件推送到 github,对吗?
0赞 T_D 2/8/2017
仅供参考:今天我所有的同事都收到了这个错误消息,最终我们决定重新启动我们的存储服务器,它得到了神奇的修复。我们不知道问题到底是什么。
0赞 hassanzadeh.sd 8/9/2021
首先,您应该检查您的分支权限或白名单。

答:

225赞 Alexander Gladysh 11/3/2011 #1

您应该询问维护存储库的人。git@mycogit/cit_pplus.git

你的提交被该存储库的预接收子拒绝(这是一个用户可配置的脚本,旨在分析传入的提交并确定它们是否足够好,可以被接受到存储库中)。

让那个人更新钩子也是一个好主意,这样它就会打印拒绝的原因。

如果维护者是你自己,那么看起来你在服务器端的设置有问题。届时请分享更多信息。

评论

11赞 Vítor Neil Avelino 5/18/2016
就我而言,BitBucket 对提交消息内容进行了验证,并用当时处于离线状态的 JIRA 票证来面对它。
1赞 shareef 10/8/2016
那么当它上线时,它是固定的?
12赞 M M 1/22/2019
就我而言,生成提交的用户名与 BitBucket 中的用户名不匹配。我没有被授权更新 BitBucket 用户名,所以我不得不重置我的提交,然后使用更新的用户名再次提交。您可以使用此命令更新 git 用户名git config user.name 'UpdatedUserName'
3赞 Ramon Fincken 5/16/2019
在我们的例子中,bitbucket 不允许任何人推送到这个分支。
0赞 Sizons 8/23/2019
就我而言,我必须在 bitbucket 上找到 repo 设置,并在 Hooks 设置下禁用验证提交者。
104赞 ThiefMaster 11/3/2011 #2

我敢打赌,你正在尝试一个非快进的推动,而钩子挡住了它。如果是这种情况,只需在推送将本地更改重新定位到最新代码库之前运行即可。git pull --rebase

评论

0赞 AlokeT 3/20/2019
这太棒了。现在我可以再次推拉,但在此之前我需要将上游设置为 .+1 表示您的答案。git branch --set-upstream-to=origin/myBranch
0赞 CoolMind 11/13/2019
在一个新的存储库中,我推送了一个分支(不是主分支),然后重新定位了它并在推送过程中出现错误。我没有找到网络钩子。我执行了,不得不再次变基,并能够推动分支。最后,我发现我的分支受到了保护。git pull --rebase
35赞 yong 9/24/2015 #3

这可能是因为您没有将提交推送到分支(例如 .你可以要求维护者给你推送提交的权利。master

评论

0赞 Mark 7/12/2016
我认为这是正确的,但有趣的是 VS 似乎试图将实际的分支名称推送到父分支,而不是将实际的分支名称推送到远程。因此,如果父分支受到保护,这似乎正在发生,但在 VS 中似乎没有纠正此问题,您必须切换到 cmd 行。
6赞 serup 12/28/2015 #4

当我尝试合并文件大小大于远程存储库允许的更改时,我遇到了这个问题(在我的情况下是 GitHub)

评论

3赞 CodenameDuchess 11/17/2017
就我而言,即使在删除文件后,GitHub 仍然抱怨......但这个答案确实 stackoverflow.com/questions/19573031/......
111赞 ozkary 2/19/2016 #5

文件大小很重要。单个文件有 ~120MB 的限制。就我而言,使用 Visual Studio 的 .gitignore 列出了该文件,但该文件仍处于提交状态。使用 git cli 时,我们可以获得有关错误的更多详细信息。

预接收钩子被拒绝是由于大文件造成的。基本上是验证推送。

为了解决这个问题,我使用以下命令删除了最后一个提交:

git reset --soft HEAD~1

然后,我从提交中排除了该文件。

注意: 使用 HEAD~N 返回到之前提交的 N 次。(即 3、4) 始终使用 --soft 开关来维护文件夹中的更改

评论

0赞 meewog 7/15/2016
这很有帮助,因为我的问题是(意外)推送了不需要的 SQL 转储文件(文件大小为 155mb)。
3赞 1615903 11/16/2017
文件大小限制取决于您的托管服务提供商。GitHub 的限制大约是这个大小,对于其他人来说,它各不相同,而自托管 git 自然没有这样的限制。
1赞 CanCoder 6/7/2019
如果在拒绝推送后已经有多个提交,该怎么办?这是我的情况,在尝试推送到存储库之前,我在之前的一次提交中有一个不需要的大文件(627MB)
0赞 tonhozi 6/11/2019
我意外上传了一个 CSV 文件。所以就我而言,错误是由于这个原因造成的。
2赞 ozkary 6/12/2019
如果您有多个提交,请增加索引以将磁头重置回该提交。例如,使用 HEAD~3 返回到之前的三次提交。始终使用 --soft 开关来维护文件夹中的更改。
13赞 Thomm 9/30/2016 #6

当 GitLab 服务器进行一些更改时,我收到了这条消息。第二天推工作正常。无论如何,正如其他人所指出的那样,请与您的维护者核实以确保。

评论

2赞 woter324 5/3/2019
刚刚遇到这个问题,我想 GitLab 正在进行更改。给了它 10 分钟,它奏效了。我没有改变任何东西。
0赞 Renan Ferrari 11/27/2019
刚刚也有这个问题。对于可能想要检查是否是这种情况的任何人:status.gitlab.com
58赞 Dave de Jong 7/26/2017 #7

就我而言,我收到此消息是因为该分支在 GitLab 中被标记为“受保护”。

评论

5赞 CoolMind 11/13/2019
请参阅 stackoverflow.com/a/28832644/2914140 或 GitLab 项目 > Settings > Repository,然后找到它。Protected Branches
0赞 generic_user 5/19/2022
zomg 如果不是这个答案,我会掉进这么可怕的兔子洞
0赞 frmdstryr 8/4/2017 #8

我在尝试推送到 dokku 实例时得到了这个。原来我的服务器上磁盘已满。

跑:du -f

结果是:

Filesystem      Size  Used Avail Use% Mounted on
udev            476M     0  476M   0% /dev
tmpfs           100M  4.4M   95M   5% /run
/dev/xvda1      7.8G  7.4G  8.9M 100% /
2赞 Aditya Deshmane 1/12/2018 #9

就我而言,我们有用于提交消息的钩子,如果它们具有提交消息的特殊格式,我们的服务器脚本就会接受提交。如果相应的 Jira 票证不存在或提交消息中有一些特殊符号,则 it(hook) 拒绝提交。当我在提交消息中添加 /、[、> 等时,我会遇到这个错误,删除它们可以正常工作。"<JIRA ID><Message>"

评论

1赞 aronisstav 2/6/2018
这个答案不太可能有帮助,因为原始发布者(以及将来访问的任何其他人)将有一个不同的脚本配置为预接收钩子。
0赞 Agnel Amodia 2/6/2018 #10

这实际上是在 BitBucket 的服务器端启用 YACC 时发生的。YACC 允许在提交消息中提及 JIRA 问题名称。因此,每当您提交任何内容时,至少将您的 JIRA 编号保留在提交消息中,然后您还可以添加自己的消息。

7赞 shapiro yaacov 4/17/2018 #11

我遇到了同样的问题。
对我来说,解决它的方法是切换到另一个分支,然后回到原来的分支。

不确定下划线的原因是什么,但这解决了它。

评论

0赞 zabop 11/22/2018
我也不能推到新分支
0赞 Dan Weaver 11/9/2021
同样在这里。 然后就是我所要做的,以获得推送权限。然后当然,要保持清洁:-)git checkout -b testgit checkout mastergit branch -d test
0赞 Sidney Sousa 5/18/2023
我也是一样。切换到旧分支并从旧分支推送,然后切换回该分支修复了它。再一次,不要问如何:)
2赞 shdr 6/18/2018 #12

对我来说,远程git服务器上的授权解决了这个问题。enter image description here

1赞 GoTo 7/19/2018 #13

我使用的是 GitKraken,我们创建了一个本地分支,然后我们在其中合并了两个远程分支,然后我们试图将本地分支推送到源。它不适用于相同的错误消息。

解决方案创建本地分支并首先将其推送到源,然后进行合并。

0赞 Dugini Vijay 11/29/2018 #14

问题:“PUSH 失败的 refs/head/ - 预接收钩子被拒绝”

我遇到了无法将我的更改推送到我的原始分支和任何内容到特定项目存储库的主分支的问题,因为该存储库的大小超过了 2GB 的硬限制。它抛出了错误。 这是因为我们在不知不觉中将测试数据从其他测试分支推送到了 bitbucket。

PUSH 失败 refs/head/ - 预接收钩子被拒绝

因此,尝试检查是否与其他项目存储库相同,并且它们没有任何问题。

修复:

我的同事注意到,当我们在本地克隆项目时,项目的大小是 110MB。因此,我们开始清理之前合并的分支和不再需要的活动分支。 一旦对几个分支进行了清理,我们意识到存储库的大小从 2GB 急剧下降到 120MB。然后我们尝试将更改推送到我的分支,它起作用了。

5赞 medmek 4/18/2019 #15

如果它对某人有帮助:

我有一个空白的存储库,没有主分支来取消保护(在 Gitlab 中),所以在运行之前git push -u origin --all

  • 我只好先跑,git push -u origin master
  • 暂时取消对 master 分支的保护
  • 推其余部分 (--all & --tags)
0赞 Manuel Alanis 5/9/2019 #16

对我来说,错误是该项目没有创建任何分支,而我的角色是开发人员,所以我无法创建任何分支,请求他们给我相关的权限,现在一切都井井有条!

4赞 diman82 6/23/2019 #17

Bitbucket:在“设置”中检查分支权限(可能处于“全部拒绝”状态)。 如果这不起作用,只需将您的分支克隆到新的本地分支,将更改推送到远程分支(将创建一个新的远程分支),然后创建一个 PR。

4赞 Sandra Pavan 8/8/2019 #18

我遇到了同样的错误,在检查我具有开发人员访问权限并且无法发布新分支时。添加更高的访问权限解决了此问题。(Gitlab的)

3赞 Sergej Popov 10/20/2019 #19

我在 GitHub gist 中遇到了此错误。 我试图推送带有子目录中的文件的提交。 原来 gist 只能在根目录中包含文件。

评论

0赞 Carl Walsh 12/22/2019
也得到了这个。事实证明,存储库的文件给 Windows 上的 git 带来了困难。"snippets\\csharp.json"
0赞 Duc Filan 11/7/2019 #20

您的远程设备尚不存在默认分支(例如 )。因此,您首先需要在 git 远程服务器中创建分支(例如创建默认文件),然后尝试使用以下命令访问所有现有的本地分支:mastermasterREADME.mdpush

git push -u origin --all
1赞 CoolMind 11/13/2019 #21

就我而言,我有一个新的存储库,推送了一个分支(“UCA-46”,而不是“master”),重新定位它,再次强制推送并出现错误。不存在 web-hooks。我按照@ThiefMaster的建议执行,不得不再次变基并能够推动分支。但这是一种奇怪而困难的方式。git pull --rebase

然后我看到 Git 推送错误预接收钩子被拒绝。我发现我的分支受到保护。我取消了保护,可以再次强行推动。

enter image description here

3赞 eTechman 2/19/2020 #22

删除受保护的分支选项,或允许其他角色(如开发人员或管理员)允许遇到此错误的这些用户执行合并和推送。

19赞 hai jiang 7/6/2020 #23

有时,因为您正在推送的分支已受到保护,因此您可以要求存储库的维护者更改保护状态。在 git-lab 中,您可以在

Settings > Repository > Protected Branches .

:)

0赞 TundraGreen 9/2/2020 #24

我在尝试删除远程分支(git push origin --delete [branch-name])时收到此消息。问题是该分支在 bitbucket 中被标记为不可删除。

1赞 JoshuaRDBrown 1/4/2021 #25

就我而言,我收到此错误是因为已经存在同名的分支。从 git 服务器中删除此分支将解决此问题。

1赞 Anurag Jain 5/25/2021 #26

就我而言,Gitlab 上的一个项目中有一个 Committer 限制:

用户只能将使用他们自己的已验证电子邮件之一提交的提交推送到此存储库。

由于我也在我的机器上配置了SSH,我的global_user_email在git配置文件中使用我的机器地址进行了更新,因此远程不允许推送。

您可以在以下位置找到它:

  • Gitlab -> 设置 -> 存储库 -> 推送规则

只需禁用提交限制,它就会起作用。

评论

0赞 kelvin 5/26/2021
什么“git 全局文件”?你是说~/.gitconfig吗?
1赞 Anurag Jain 5/30/2021
嘿开尔文,是的,你是对的:git config --global user.name 和 git config --global user.email ;
22赞 gutte 7/15/2021 #27

就我而言(Bitbucket),问题是限制。 转到编辑所选分支的权限,然后选中Rewriting branch history is not allowedRepository settings -> Branch PermissionsAllow rewriting branch history

Allow rewriting branch history

评论

2赞 RichardK 2/1/2022
在 GitLab 上,我在 Settings -> Repository -> 下找到了此选项:允许所有具有推送访问权限的用户强制推送。
0赞 Ashish Karpe 7/1/2022
我已将我的用户添加到防止重写历史记录 --bitbucket 中的>豁免仍然收到错误预接收钩子被拒绝用于 master 以及派生自 master 的分支,请注意我正在迁移 github 存储库,因此使用了 fetch --all 并将远程更改为 bitbucket 存储库
1赞 Vitalina 8/4/2021 #28

我通过重新生成 SSH 密钥并将其添加到 GitHub 帐户解决了这个问题。

1赞 001001 6/28/2022 #29

我的问题是文件大小,试图将项目从 gitlab 迁移到 github,并且错误确实提示了我,指向此页面 https://docs.github.com/en/repositories/working-with-files/managing-large-files/moving-a-file-in-your-repository-to-git-large-file-storage

使用的命令是:

git lfs migrate import --everything --above=100kb

在此之后,我能够git push --mirror http:...

2赞 Sumit Bajaj 9/23/2022 #30

步骤1:

git pull --rebase

步骤2:

git reset --soft HEAD~1

步骤3:

git commit -m "your comments here"

步骤4:

git push

这应该可以解决您的问题。

评论

0赞 john k 11/10/2023
我不得不回去几次提交,但是的,这为我做到了