Git プッシュ失敗の解決法
git push を実行してエラーメッセージが表示されると、初心者のうちは何が起きているか分からず戸惑います。このページでは、よくある push 失敗の原因とその解決手順を体系的に解説します。
対象読者: git push でエラーが出て困っている方
学習時間の目安: 読了 10分 + 実践 10分
前提知識: Git の基本操作(add・commit・push)を理解していること
push 失敗の主な原因
Section titled “push 失敗の主な原因”原因 1:リモートにローカルにないコミットがある
Section titled “原因 1:リモートにローカルにないコミットがある”チームメンバーが先に push していたり、GitHub 上でファイルを編集したりすると、リモートがローカルより新しい状態になります。
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref.この状態ではリモートの変更を先に取り込む必要があります。
原因 2:トラッキング情報が未設定
Section titled “原因 2:トラッキング情報が未設定”ブランチのトラッキング設定(ローカルブランチとリモートブランチの対応関係)がない場合に発生します。
There is no tracking information for the current branch.
Please specify which branch you want to merge with.手順 1:トラッキング情報を設定する
Section titled “手順 1:トラッキング情報を設定する”リモートの origin/main をローカルの main ブランチで追跡するよう設定します。
git branch --set-upstream-to=origin/main mainこの設定を行うと、以降の git pull や git push がシンプルに実行できます。
確認コマンドです。
git branch -vv
# main abc1234 [origin/main] コミットメッセージ[origin/main] のように表示されれば正しく設定されています。
手順 2:リモートの変更を取り込む
Section titled “手順 2:リモートの変更を取り込む”リモートにある最新の変更をローカルに取り込みます。--rebase オプションを使うと、ローカルのコミットをリモートの最新コミットの後に並べ直すため、マージコミットが作成されず履歴がすっきりします。
git pull --rebase origin main⚠️
git pull --rebase中にコンフリクトが発生した場合は、該当ファイルを手動で修正してから以下を実行します。git add <修正したファイル> git rebase --continueリベースを中止したい場合は
git rebase --abortで元の状態に戻せます。
手順 3:再度 push する
Section titled “手順 3:再度 push する”変更の取り込みが完了したら、再度 push を実行します。
git push origin mainこれでローカルの変更がリモートに反映されます。
よくあるエラーと対処法の一覧
Section titled “よくあるエラーと対処法の一覧”| エラーメッセージ | 原因 | 対処法 |
|---|---|---|
Updates were rejected because the remote contains work | リモートの方が新しい | git pull --rebase origin main |
There is no tracking information | トラッキング未設定 | git branch --set-upstream-to=origin/main main |
Permission denied (publickey) | SSH 鍵が認証されていない | SSH 鍵を GitHub に登録する |
src refspec main does not match any | ローカルに main ブランチがない | git branch -M main でブランチ名を変更 |
fatal: remote origin already exists | origin がすでに設定済み | git remote set-url origin <URL> で URL を変更 |
認証エラーの場合(SSH 設定)
Section titled “認証エラーの場合(SSH 設定)”Permission denied (publickey) が表示された場合は SSH 認証に問題があります。
# SSH 接続テスト
ssh -T git@github.com
# 正常な場合の出力例:
# Hi username! You've successfully authenticated.接続できない場合は SSH 鍵の生成と GitHub への登録が必要です。詳しくは「GitHub アカウントと SSH 鍵の設定」を参照してください。
HTTPS に切り替えることで認証エラーを回避できる場合もあります。
git remote set-url origin https://github.com/username/repo.gitpush 前の確認習慣
Section titled “push 前の確認習慣”push でトラブルになる前に、以下の確認を習慣にすると安心です。
# 1. 現在のブランチとトラッキング状態を確認
git branch -vv
# 2. リモートとの差分を確認
git status
# 3. リモートの最新情報を確認(ローカルには反映しない)
git fetch origin
git log origin/main --oneline -5💡
git fetchとgit pullの違いは、fetchはリモートの情報を取得するだけでローカルブランチには反映しない点です。pullはfetch+merge(またはrebase)を行います。
Q. git push -f(強制プッシュ)を使っても良いですか?
-f による強制プッシュは、共有ブランチでは他のメンバーの作業を上書きする危険性があります。自分だけが使うブランチでのみ使用し、共有ブランチ(main など)では使わないのが原則です。強制プッシュが必要な場合は -f の代わりに --force-with-lease を使うと、他の人が先に push していた場合にエラーを出してくれるため、より安全です。
Q. git pull と git pull --rebase はどちらを使えば良いですか?
一般的に、--rebase を使うと履歴が直線的になり分かりやすくなります。ただし、コンフリクトが発生した場合の対処がやや複雑になります。初心者のうちは git pull で問題ありません。
Q. push が失敗したら、コミットした内容は消えますか?
消えません。コミットはローカルリポジトリに安全に保存されています。push の失敗はリモートへの反映が失敗しただけで、ローカルのコミットには影響しません。