git pushしたらrejectedエラーが出る
💬 質問
git push を実行したら rejected というエラーが出ました。どうすれば解決できますか?
✅ 回答
このエラーは初心者がとてもよく遭遇するものです。落ち着いて対処しましょう。
エラーメッセージ
! [rejected] main -> main (fetch first)
error: failed to push some refs to '...' 原因
GitHubのリポジトリに、ローカルにないコミットが存在しています。最も多いのはリポジトリ作成時に「Add a README file」にチェックを入れたケースです。
解決方法1:pull してから push
git pull --rebase origin main
git push origin main これでリモートの変更を取り込んでから、自分の変更を送信できます。
解決方法2:リポジトリを作り直す(新規の場合)
まだ始めたばかりなら、GitHubでリポジトリを削除してREADMEなしで作り直すのが最も簡単です。
git remote set-url origin https://github.com/ユーザー名/リポジトリ名.git
git push -u origin main まとめ:新しいリポジトリを作るときは「Add a README file」のチェックを外しましょう。エラーが出たら git pull --rebase origin main で解決できます。
原因2:チームメンバーが先にpushした
学園祭サイトをチームで作っているとき、友達が先にpushすると自分のpushがrejectedになります。これはGitが「リモートに知らない変更がある」と教えてくれているだけで、エラーではありません。
# 友達の変更を取り込んでから自分の変更をpush
git pull origin main
git push origin main
# コンフリクトが出たら手動で解決してcommit
git add .
git commit -m "resolve conflict"
git push origin main 原因3:権限エラー(403 / permission denied)
rejectedではなく「403 Forbidden」や「Permission denied」が出る場合は、リポジトリへの書き込み権限がありません。
確認方法:GitHubのリポジトリ → Settings → Collaborators で自分が追加されているか確認。追加されていなければリポジトリのオーナーに招待してもらいましょう。
pull --rebase と pull(merge)の違い
git pull(merge):リモートの変更と自分の変更を「マージコミット」で合流させる。履歴が分岐して見える。
git pull --rebase:リモートの変更の「後ろ」に自分のコミットを並べ直す。履歴が一直線になってきれい。
初心者へのおすすめ:git pull --rebase を使いましょう。履歴がシンプルになり、チーム開発でも見やすくなります。
force push は最終手段
git push --force はリモートの履歴を強制的に上書きします。チームメンバーの変更が消える可能性があるので、基本的に使わないでください。
どうしても必要な場合は git push --force-with-lease を使いましょう。他の人がpushしていた場合は拒否してくれるので、少し安全です。
中高生あるある:学園祭サイトをチームで作っている
学園祭サイトを3人で作っていて、Aさんがpushした後にBさんがpushしようとするとrejectedになります。これは正常な動作です。Bさんはgit pull origin mainで Aさんの変更を取り込んでからpushしましょう。
コンフリクト(同じファイルの同じ行を編集した場合)が起きたら、VS Codeが「Accept Current Change」「Accept Incoming Change」「Accept Both Changes」のボタンを表示してくれます。どちらの変更を残すか選んで保存し、commitしてからpushしましょう。
rejectedを防ぐ習慣
1. 作業を始める前に必ず git pull する
2. こまめにcommit&pushする(大きな変更を溜めない)
3. チームで「誰がどのファイルを編集するか」を事前に決める
これらを守れば、rejectedエラーに遭遇する頻度を大幅に減らせます。
解決しなかった?
エンジニアに質問する →