コンテンツにスキップ
X

Git プッシュ失敗の解決法

git push を実行してエラーメッセージが表示されると、初心者のうちは何が起きているか分からず戸惑います。このページでは、よくある push 失敗の原因とその解決手順を体系的に解説します。

対象読者: git push でエラーが出て困っている方

学習時間の目安: 読了 10分 + 実践 10分

前提知識: Git の基本操作(add・commit・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 pullgit 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 で元の状態に戻せます。

変更の取り込みが完了したら、再度 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 existsorigin がすでに設定済みgit remote set-url origin <URL> で URL を変更

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.git

push でトラブルになる前に、以下の確認を習慣にすると安心です。

# 1. 現在のブランチとトラッキング状態を確認
git branch -vv

# 2. リモートとの差分を確認
git status

# 3. リモートの最新情報を確認(ローカルには反映しない)
git fetch origin
git log origin/main --oneline -5

💡 git fetchgit pull の違いは、fetch はリモートの情報を取得するだけでローカルブランチには反映しない点です。pullfetch + merge(または rebase)を行います。

Q. git push -f(強制プッシュ)を使っても良いですか?

-f による強制プッシュは、共有ブランチでは他のメンバーの作業を上書きする危険性があります。自分だけが使うブランチでのみ使用し、共有ブランチ(main など)では使わないのが原則です。強制プッシュが必要な場合は -f の代わりに --force-with-lease を使うと、他の人が先に push していた場合にエラーを出してくれるため、より安全です。

Q. git pullgit pull --rebase はどちらを使えば良いですか?

一般的に、--rebase を使うと履歴が直線的になり分かりやすくなります。ただし、コンフリクトが発生した場合の対処がやや複雑になります。初心者のうちは git pull で問題ありません。

Q. push が失敗したら、コミットした内容は消えますか?

消えません。コミットはローカルリポジトリに安全に保存されています。push の失敗はリモートへの反映が失敗しただけで、ローカルのコミットには影響しません。