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


206

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

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'

这是怎么回事?


8
接收前挂钩mycogit中有什么?
rob mayoff 2011年

您不会尝试将大文件推送到github上吗?
亚当F

仅供参考:今天我所有的同事都收到了此错误消息,最终我们决定重新启动存储服务器,并对其进行了神奇的修复。我们不知道问题到底是什么。
T_D

Answers:


125

您应该问谁在维护回购协议git@mycogit/cit_pplus.git

您的提交被该存储库的pre-receive钩子拒绝了(这是一个用户可配置的脚本,用于分析传入的提交并确定它们是否足以被存储库接受)。

要求该人更新挂钩也是一个好主意,这样可以打印出拒绝的原因。

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


7
就我而言,BitBucket对提交消息的内容进行了验证,并将其与当时处于脱机状态的JIRA票据相对。
尼尔·阿维利诺

1
那么当它在线上时是固定的吗?
shareef

5
以我为例,生成提交的用户名和BitBucket中的用户名不匹配。我无权更新BitBucket用户名,因此我必须重置自己的提交,然后使用更新的用户名再次提交。您可以使用以下命令更新git用户名git config user.name 'UpdatedUserName'
MM

3
在我们的案例中,bitbucket不允许任何人推送到该分支。
拉蒙·芬肯

就我而言,我必须在bitbucket上找到回购设置,并在“挂钩”设置下禁用验证提交程序。
西松斯(Sizons)

78

我敢打赌,您正在尝试非快进推送,而钩子阻止了它。如果是这种情况,只需git pull --rebase在推送以将本地更改重新基于最新代码库之前运行即可。


这太棒了。现在,我可以再次推拉,但​​是在此之前,我需要将上游设置为git branch --set-upstream-to=origin/myBranch。+1为您的答案。
AlokeT

在一个新的存储库中,我推送了一个分支(不是主节点),然后对其进行了重新基础化,并在推送期间收到错误消息。我没有找到网络挂钩。我执行了git pull --rebase,不得不重新设置基准,并且能够推动分支。最终我发现我的分支受到保护。
CoolMind

60

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

接收前钩数下降是由于文件大。基本上验证推送。

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

git reset --soft HEAD~1

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

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

希望能帮助到你。


这很有帮助,因为我的问题是(意外)推送了不需要的SQL转储文件(文件大小为155mb)。
Mehrdad Dastgir '16

1
文件大小限制取决于您的托管服务提供商。GitHub的大小大约有一个限制,对于其他大小则有所不同,并且自托管的git自然也没有这样的限制。
1715903年

1
如果拒绝推送后已经进行了几次提交,该怎么办?这是我的情况,在尝试推送回购之前,我在先前的提交中有一个不需要的大文件(627MB)
leeCoder

我偶然上传了一个CSV文件。因此,就我而言,该错误是由于该原因造成的。
tonhozi

如果您有多个提交,请增加索引以将磁头重置回该提交。例如,使用HEAD〜3返回前三个提交。始终使用--soft开关来维护文件夹中的更改。
ozkary

13

这可能是因为您无权将提交推送到分支(例如)master。您可以要求维护者授予您推送提交的权利。


我认为这是正确的,但有趣的是VS似乎正在尝试将其父分支而不是实际的分支名称推送到远程站点。因此,如果父分支受到保护,这似乎正在发生,但是在VS中似乎没有任何方法可以纠正此问题,因此您必须切换到cmd行。
2016年


8

当GitLab服务器进行一些更改时,我收到了此消息。第二天推的效果很好。无论如何,正如其他人指出的那样,请与您的维护人员确认。


1
刚遇到这个问题,我猜想GitLab正在进行更改。给了它10分钟,它奏效了。我什么都没改变。
woter324 '19

也有这个问题。对于任何可能想要检查这种情况的人:status.gitlab.com
Renan Ferrari

5

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


2
就我而言,即使删除了文件,GitHub仍然抱怨...但是这个答案
CodenameDuchess

5

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

不知道下划线的原因是什么,但这已解决。


我也不能推到新的分支机构
zabop

3

Bitbucket:在“设置”中检查“分支”权限(可能在“全部拒绝”上)。如果那行不通,只需将分支克隆到新的本地分支,将更改推送到远程(将创建一个新的远程分支),然后创建PR。


2

如果它可以帮助某人:

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

  • 我必须跑git push -u origin master第一,
  • 暂时取消保护主分支
  • 推其余(--all--tags

2

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


2

我在GitHub gist上遇到此错误。我试图在子目录中推送带有文件的提交。事实证明,要点只能在根目录中包含文件。


也有这个。事实证明,仓库中有文件"snippets\\csharp.json"给Windows带来了麻烦。
卡尔·沃尔什

2

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


1

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


这个答案不太可能有所帮助,因为原始海报(以及将来访问的其他任何人)将具有配置为预接收挂钩的其他脚本。
aronisstav

1

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


1

我使用的是GitKraken,我们创建了一个本地分支,然后合并了其中的两个远程分支,然后尝试将本地分支推到原点。它与相同的错误消息不起作用。

解决方案创建本地分支,第一推到原点,然后做合并。


1

问题:“推失败的参考/头/-预接收挂钩被拒绝”

我遇到了无法将更改推送到我的原始分支以及将任何东西推送到特定项目存储库的主分支的问题,因为该存储库的大小超过了2GB的硬限制。它引发了错误。那是因为我们在不知不觉中将测试数据从其他测试分支推到了位桶中。

PUSH裁判/裁判/失败-接收前弯钩被拒绝

因此,尝试检查的结果与其他项目存储库相同,并且没有任何问题。

固定:

我的同事注意到,当我们将项目克隆回本地时,项目的大小为110MB。因此,我们开始清理先前合并的分支和不再需要的活动分支。一旦完成了几个分支的清理,我们就意识到回购的大小从2GB急剧下降到120MB。然后,我们尝试将更改推送到我的分支,并且成功了。


1

就我而言,我有一个新的存储库,推送了一个分支(“ UCA-46”,而不是“ master”),对其进行了重新设置基础,再次强行推送并得到了错误。没有网络挂钩。我执行git pull --rebase@ThiefMaster建议,不得不重新设置,然后才能推动分支。但这是一种奇怪而困难的方法。

然后我看到Git推送错误预接收钩下降了。我发现我的分支受到保护。我取消了保护,可能会再次强行推动。

在此处输入图片说明


0

尝试推送到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% /

0

对我来说,远程git服务器上的授权可以解决此问题。 在此处输入图片说明


0

就我而言,这是因为我不小心将一个巨大的文件添加到了我未提交的推送中,无论之后进行了任何拉,重设或rm,我都无法摆脱它。

我的肮脏解决方案但可行的解决方案是重命名当前目录,将目录重新克隆到本地,并将更改手动反映到重新克隆的本地目录...

听起来不好,但是可以用...


1
我遇到了同样的问题,并使用$ git reset --soft HEAD〜1作为@ozkary建议的帮助。
jarrettyeo '18 -10-29


0

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

git push -u origin --all

0

对我而言,一切运转良好,直到Bitbucket今天自动更改其政策(2020年4月21日)。这恰好与最近引入的一项名为Workspaces的新功能保持一致,因此我怀疑它与此有关。

解决方法:我(作为管理员)按照说明在用户界面中向用户添加电子邮件地址(可以找到您正在使用的电子邮件git config --list

在此处输入图片说明


-7

指定node.js版本可以解决类似的问题

{
  "name": "myapp",
  "description": "a really cool app",
  "version": "1.0.0",
  "engines": {
    "node": "10.3.0"
  }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.