はじめに
Gitを使って開発をしていると、pushやpullでエラーに遭遇することがあります。
特にチーム開発では、自分の知らないうちにリモートに変更が加わっていることも。
今回は、Git pushが失敗した状況と、その復旧方法についてメモとしてまとめました。
書こうと思ったきっかけ
実際の開発中にGit pushが失敗し、原因や対処法を探すのに時間がかかったため、今後同じようなトラブルに遭遇したときにスムーズに対応できるようにするためです。また、同じようなエラーに悩む人の参考にもなればと思い、記録を残すことにしました。
状況の整理
開発中に以下のようなGit操作を行った際、pushが失敗しました。
git push origin main
表示されたエラー:
Updates were rejected because the remote contains work that you do not have locally.
つまり、リモートに自分のローカルにはない変更があるということ。
これは、他の開発者や別の環境からリモートに先にpushされていた場合によくある現象です。
実行したコマンドとその意味
コマンド | 説明 |
---|---|
git add . |
すべての変更をステージング(準備) |
git commit -m "page.tsxの修正" |
page.tsx の修正をコミット |
git push origin main |
失敗:リモートとの差分が原因で拒否された |
git remote -v |
リモートURLの確認(問題なし) |
git stash |
作業中の変更を一時退避(※今回は何もなかった) |
git pull origin main |
失敗:リモートとの分岐をどう統合するか未設定でエラー |
git config pull.rebase false |
解決の鍵:pull動作を「マージ」に設定 |
git pull origin main |
成功:ローカルとリモートの履歴をマージ |
git stash pop |
一時退避していた変更を戻す(※内容なし) |
git push origin main |
成功:pushが通った! |
解決の決め手は?
git config pull.rebase false
この1行で、Gitが「リモートとの差分をマージで統合する」と判断できるようになり、git pull のエラーが解消されました。
その後の git push もスムーズに成功。
まとめ
ここまで読んでいただきありがとうございました!最後に簡単に箇条書き程度で残しておきます。
- Pushできない原因は「リモートとの差分」だった。
- 解決には
git config pull.rebase false
でpull動作を明示。 - 今後に備えて
--global
オプションで設定するのがおすすめ。 - トラブル時は焦らず、エラーメッセージを読み解くことが重要。
- 同じ現象に出会ったときのために、記録を残しておくと安心です。