git pushで400エラーになる原因と対処法

この記事は約3分で読めます。

VSCodeからGitHubへ push したときに「Git: RPC failed; HTTP 400 curl 22 The requested URL returned error: 400」が出て、通常の push が通らなくなりました。今回の環境では http.postBuffer の既定値(1MiB)が小さく、送信時に詰まっていたのが主因でした。postBuffer を引き上げたところ復旧できたので、この記事ではその手順を中心にまとめます。

忙しい人向け

今回の原因は、http.postBuffer の値が小さく、大きめの push データ送信時にHTTP 400になっていたことでした。 git config --global http.postBuffer 524288000 を設定し、再 push すると解消しました。

問題発生時のファイル構成(例)

my-repo/
├─ .git/
├─ src/
├─ docs/
│  └─ large-image.png
└─ README.md

上のように画像や生成物を含む構成では、push 時の送信データが大きくなり、環境によっては postBuffer 既定値の影響を受けることがあります。

発生環境

  • OS: macOS
  • Git: 2.50
  • クライアント: VSCode + CLI
  • リモート: GitHub(HTTPS)

1. この記事でわかること

  • http.postBuffer が原因で HTTP 400 になるパターン
  • postBuffer を引き上げる具体的な設定手順
  • 設定後に確認するポイント
  • 必要なら戻す方法

2. 症状

  • git push origin main 実行時に RPC failed; HTTP 400 が出る
  • 小さな差分は通るが、変更量が多いと失敗しやすい
  • 以前は成功していたのに、あるタイミングから突然失敗する

今回の環境では、送信サイズが増えたタイミングで再現しやすくなっていました。

3. 前提条件(この記事の対象範囲)

  • HTTPS でリモート運用しているリポジトリ
  • RPC failed; HTTP 400 が出て push だけ失敗する構成
  • 画像や生成物を含み、pushデータが大きくなりやすいケース

※ 社内プロキシ、WAF、SSO 制約がある場合は **環境依存の可能性** があります。

4. 原因

今回の主因は http.postBuffer でした。 http.postBuffer は HTTP 経由で push するときの送信バッファ設定で、既定値(1MiB)のままだと、環境によっては大きいデータ送信で失敗する場合があります。

  1. 変更量が増えて push データが大きくなった
  2. postBuffer 既定値のままで、送信時に HTTP 400 が返るようになった

5. 対処手順

手順1: 現在の postBuffer を確認する

git config --global --get http.postBuffer

値が未設定なら既定値運用です。

手順2: postBuffer を引き上げる

git config --global http.postBuffer 524288000

手順3: 再 push する

git push origin main

手順4: 必要なら設定値を見直す

# 設定確認
git config --global --get http.postBuffer

# 元に戻す(未設定状態へ戻す)
git config --global --unset http.postBuffer

6. 参考

タイトルとURLをコピーしました