【问题标题】:git push fails: RPC failed; result=22, HTTP code = 411git push 失败:RPC 失败;结果 = 22,HTTP 代码 = 411
【发布时间】:2025-12-21 11:55:11
【问题描述】:

我只有一个分支。用了几个月

git push origin master

提交到我的本地存储库。昨晚我对本地存储库进行了一些小改动并尝试使用相同的命令推送后,我收到了这个错误:

error: RPC failed; result=22, HTTP code = 411
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
Everything up-to-date

我在 Google 上搜索并找到了诸如 this onethis one 之类的问题,但这些问题的答案都没有解决我的问题。

大部分答案都暗示了头部脱落的问题。然而,我不认为我的头是分离的。我也不认为我在错误的分支上(因为我只有一个分支......)

我做了一些实验来找出问题所在,以下是我得到的结果:

(1) 首先是我的git status 输出

# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
# egal.aux
# egal.blg
# egal.out
# egal.pdf
# egalcar.aux
# egalcar.blg
# egalcar.pdf
nothing added to commit but untracked files present (use "git add" to track)

(2) 当我输入git reflog 时,我可以看到我所有的本地提交,但远程存储库不会更新。

(3) 当我输入git branch -a 时,我得到

* master
  remotes/origin/master

(4) 当我输入 git remote show origin 时,我得到了

* remote origin
  Fetch URL: http://github.com/CherryQu921/egaldoc_en
  Push  URL: http://github.com/CherryQu921/egaldoc_en
  HEAD branch: master
  Remote branch:
    master tracked
  Local ref configured for 'git push':
    master pushes to master (fast-forwardable)

我认为最后一行输出(“fast-forwardable”)很奇怪,但我不确定是什么问题...

【问题讨论】:

  • fast-forwardable 意味着您可以将本地更改推送到远程分支,没有犯罪:-)

标签: git github


【解决方案1】:

如果您尝试使用 HTTP 或 HTTPS 将大量更改推送到 Git 存储库,您可能会收到错误消息,例如错误:RPC failed; result=22, HTTP code = 411。这是由 Git 配置默认值导致的,该默认配置将某些 HTTP 操作限制为 1 兆字节。

要更改此限制,请在本地存储库中运行

git config http.postBuffer *bytes*

其中字节是允许的最大字节数。例如:

git config http.postBuffer 524288000

500MB(感谢@Hengjie)

【讨论】:

  • 一个例子是git config http.postBuffer 524288000 500MB。
  • 如果您使用的是 gitlab,您可能还需要更改您的 nginx 配置 (/etc/nginx/sites-available/gitlab)。更多信息:github.com/gitlabhq/gitlabhq/issues/3099
  • 如果显示RPC failed; result=22, HTTP code = 502怎么办?
  • 我仍然收到以下错误 git: RPC failed; result=22, HTTP code = 504 in bitbucket on android studio
【解决方案2】:

您也可以全局执行此操作 -

git config --global http.postBuffer 524288000

这将允许所有本地存储库推送多达 500MB 的数据。

【讨论】:

    【解决方案3】:

    所提供的解决方案都不适合我们。我们不得不切换到ssh 来完成这项工作,而不是HTTPS 解决方案。

    【讨论】:

      【解决方案4】:

      如果您使用的是 Windows 版 TortoiseGit,最简单的方法是使用集成配置。

      在文件浏览器中按下鼠标左键,选择TortoiseGit -> 设置。接受信息消息。现在,您可以选择是否只想为当前项目或系统范围配置属性。对于系统范围的配置,请按“编辑系统范围的 gitconfig”并将下一行添加到 [http] 部分:

      postBuffer = 524288000
      

      (如果[http] 部分不存在,请创建它)

      【讨论】:

        【解决方案5】:

        我解决了22错误如下: 在“git clone”命令中,我没有提供用户:密码。 克隆工作,但不是推动。 22错误的解决方法: 像这样修改 .git/config 的 url: 网址=http://user:pwd@host/... 然后,推送成功了。

        【讨论】: