提问人:Dave 提问时间:11/3/2011 最后编辑:1615903Dave 更新时间:2/11/2023 访问量:1194090
尝试推送时出现 Git 错误 -- 预接收钩子被拒绝
Git error when trying to push -- pre-receive hook declined
问:
当我尝试推送我提交的更改时,出现以下错误...
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@mycogit/cit_pplus.git
你的提交被该存储库的预接收
钩子拒绝(这是一个用户可配置的脚本,旨在分析传入的提交并确定它们是否足够好,可以被接受到存储库中)。
让那个人更新钩子也是一个好主意,这样它就会打印拒绝的原因。
如果维护者是你自己,那么看起来你在服务器端的设置有问题。届时请分享更多信息。
评论
git config user.name 'UpdatedUserName'
我敢打赌,你正在尝试一个非快进的推动,而钩子挡住了它。如果是这种情况,只需在推送将本地更改重新定位到最新代码库之前运行即可。git pull --rebase
评论
git branch --set-upstream-to=origin/myBranch
git pull --rebase
这可能是因为您没有将提交推送到分支(例如 .你可以要求维护者给你推送提交的权利。master
评论
当我尝试合并文件大小大于远程存储库允许的更改时,我遇到了这个问题(在我的情况下是 GitHub)
评论
文件大小很重要。单个文件有 ~120MB 的限制。就我而言,使用 Visual Studio 的 .gitignore 列出了该文件,但该文件仍处于提交状态。使用 git cli 时,我们可以获得有关错误的更多详细信息。
预接收钩子被拒绝是由于大文件造成的。基本上是验证推送。
为了解决这个问题,我使用以下命令删除了最后一个提交:
git reset --soft HEAD~1
然后,我从提交中排除了该文件。
注意: 使用 HEAD~N 返回到之前提交的 N 次。(即 3、4) 始终使用 --soft 开关来维护文件夹中的更改
评论
当 GitLab 服务器进行一些更改时,我收到了这条消息。第二天推工作正常。无论如何,正如其他人所指出的那样,请与您的维护者核实以确保。
评论
就我而言,我收到此消息是因为该分支在 GitLab 中被标记为“受保护”。
评论
Protected Branches
我在尝试推送到 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% /
就我而言,我们有用于提交消息的钩子,如果它们具有提交消息的特殊格式,我们的服务器脚本就会接受提交。如果相应的 Jira 票证不存在或提交消息中有一些特殊符号,则 it(hook) 拒绝提交。当我在提交消息中添加 /、[、> 等时,我会遇到这个错误,删除它们可以正常工作。"<JIRA ID><Message>"
评论
这实际上是在 BitBucket 的服务器端启用 YACC 时发生的。YACC 允许在提交消息中提及 JIRA 问题名称。因此,每当您提交任何内容时,至少将您的 JIRA 编号保留在提交消息中,然后您还可以添加自己的消息。
我遇到了同样的问题。
对我来说,解决它的方法是切换到另一个分支,然后回到原来的分支。
不确定下划线的原因是什么,但这解决了它。
评论
git checkout -b test
git checkout master
git branch -d test
我使用的是 GitKraken,我们创建了一个本地分支,然后我们在其中合并了两个远程分支,然后我们试图将本地分支推送到源。它不适用于相同的错误消息。
解决方案是创建本地分支并首先将其推送到源,然后进行合并。
问题:“PUSH 失败的 refs/head/ - 预接收钩子被拒绝”
我遇到了无法将我的更改推送到我的原始分支和任何内容到特定项目存储库的主分支的问题,因为该存储库的大小超过了 2GB 的硬限制。它抛出了错误。 这是因为我们在不知不觉中将测试数据从其他测试分支推送到了 bitbucket。
PUSH 失败 refs/head/ - 预接收钩子被拒绝
因此,尝试检查是否与其他项目存储库相同,并且它们没有任何问题。
修复:
我的同事注意到,当我们在本地克隆项目时,项目的大小是 110MB。因此,我们开始清理之前合并的分支和不再需要的活动分支。 一旦对几个分支进行了清理,我们意识到存储库的大小从 2GB 急剧下降到 120MB。然后我们尝试将更改推送到我的分支,它起作用了。
如果它对某人有帮助:
我有一个空白的存储库,没有主分支来取消保护(在 Gitlab 中),所以在运行之前git push -u origin --all
- 我只好先跑,
git push -u origin master
- 暂时取消对 master 分支的保护
- 推其余部分 (
--all
&--tags
)
对我来说,错误是该项目没有创建任何分支,而我的角色是开发人员,所以我无法创建任何分支,请求他们给我相关的权限,现在一切都井井有条!
Bitbucket:在“设置”中检查分支权限(可能处于“全部拒绝”状态)。 如果这不起作用,只需将您的分支克隆到新的本地分支,将更改推送到远程分支(将创建一个新的远程分支),然后创建一个 PR。
我遇到了同样的错误,在检查我具有开发人员访问权限并且无法发布新分支时。添加更高的访问权限解决了此问题。(Gitlab的)
我在 GitHub gist 中遇到了此错误。 我试图推送带有子目录中的文件的提交。 原来 gist 只能在根目录中包含文件。
评论
"snippets\\csharp.json"
您的远程设备尚不存在默认分支(例如 )。因此,您首先需要在 git 远程服务器中创建分支(例如创建默认文件),然后尝试使用以下命令访问所有现有的本地分支:master
master
README.md
push
git push -u origin --all
就我而言,我有一个新的存储库,推送了一个分支(“UCA-46”,而不是“master”),重新定位它,再次强制推送并出现错误。不存在 web-hooks。我按照@ThiefMaster的建议执行,不得不再次变基并能够推动分支。但这是一种奇怪而困难的方式。git pull --rebase
然后我看到 Git 推送错误预接收钩子被拒绝。我发现我的分支受到保护。我取消了保护,可以再次强行推动。
删除受保护的分支选项,或允许其他角色(如开发人员或管理员)允许遇到此错误的这些用户执行合并和推送。
有时,因为您正在推送的分支已受到保护,因此您可以要求存储库的维护者更改保护状态。在 git-lab 中,您可以在
Settings > Repository > Protected Branches .
:)
我在尝试删除远程分支(git push origin --delete [branch-name])时收到此消息。问题是该分支在 bitbucket 中被标记为不可删除。
就我而言,我收到此错误是因为已经存在同名的分支。从 git 服务器中删除此分支将解决此问题。
就我而言,Gitlab 上的一个项目中有一个 Committer 限制:
用户只能将使用他们自己的已验证电子邮件之一提交的提交推送到此存储库。
由于我也在我的机器上配置了SSH,我的global_user_email在git配置文件中使用我的机器地址进行了更新,因此远程不允许推送。
您可以在以下位置找到它:
- Gitlab -> 设置 -> 存储库 -> 推送规则
只需禁用提交限制,它就会起作用。
评论
就我而言(Bitbucket),问题是限制。
转到编辑所选分支的权限,然后选中Rewriting branch history is not allowed
Repository settings -> Branch Permissions
Allow rewriting branch history
评论
我通过重新生成 SSH 密钥并将其添加到 GitHub 帐户解决了这个问题。
我的问题是文件大小,试图将项目从 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:...
步骤1:
git pull --rebase
步骤2:
git reset --soft HEAD~1
步骤3:
git commit -m "your comments here"
步骤4:
git push
这应该可以解决您的问题。
评论