対処法
git fetch
してリモートの最新状態をローカルに取得して
git merge
で取得した最新情報のファイルをローカルに統合する。
この後、エラーが起きた push コマンドを再度たたけば問題なくローカル/リモートでファイルを最新状態にできる。
わたしの場合は、一度pushしたリポジトリにGitHub上でREADME.mdファイルを作成後に再度pushしようとした事が原因だった。
実際のエラーと対処の様子
わたしの場合、このエラーが出る前に、一度ローカルのファイルをpush して、GitHubの方でREADME.mdファイルを編集していた。(要するに GitHub上にはローカルにはないREADME.mdファイルが新規作成されている状態)
その後、別のソースファイルを git add, git commit後、git push -u originなどとプッシュしようとしてこのエラーが出た。
実際のエラーメッセージ
$ git push -u origin title_to_game To github.com:mrgarita/PocketShooting0.git ! [rejected] title_to_game -> title_to_game (fetch first) error: failed to push some refs to 'github.com:mrgarita/PocketShooting0.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.
上記エラーメッセージだと2行目に fetch first とある。
「まずはfetchしなよ」みたいな感じか?
対処時の様子
この後、git fetch するとこうなった。
$ git fetch remote: Enumerating objects: 116, done. remote: Counting objects: 100% (116/116), done. remote: Compressing objects: 100% (109/109), done. remote: Total 109 (delta 61), reused 0 (delta 0), pack-reused 0R Receiving objects: 100% (109/109), 30.06 KiB | 267.00 KiB/s, done. Resolving deltas: 100% (61/61), completed with 1 local object. From github.com:mrgarita/PocketShooting0 00c9e9f..09c4700 title_to_game -> origin/title_to_game fc71c79..754d4ba boss_appearance -> origin/boss_appearance 9ea2ee5..8e4c8df boss_bullet1 -> origin/boss_bullet1 343fa8d..3afa13d boss_bullet2 -> origin/boss_bullet2 09bcddf..1b25651 boss_motion -> origin/boss_motion 5b562fd..603bfee game_message -> origin/game_message 8bc84a8..e144467 player_kya_effect -> origin/player_kya_effect
次に git merge する
$ git merge Merge made by the 'recursive' strategy. README.md | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 README.md
これでGitHub上で更新したREADME.mdがローカルに取り込まれた。
最後にエラーが出たpushコマンドを実行したら問題なくプッシュされた。
$ git push -u origin title_to_game Enumerating objects: 7, done. Counting objects: 100% (7/7), done. Delta compression using up to 8 threads Compressing objects: 100% (5/5), done. Writing objects: 100% (5/5), 1.11 KiB | 1.11 MiB/s, done. Total 5 (delta 2), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (2/2), completed with 1 local object. To github.com:mrgarita/PocketShooting0.git 09c4700..43e317c title_to_game -> title_to_game Branch 'title_to_game' set up to track remote branch 'title_to_game' from 'origin'.
参考にしたサイト
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JTIwJUUzJTgwJTkwJUU1JTg4JTlEJUU1JUJGJTgzJUU4JTgwJTg1JUU1JTkwJTkxJUUzJTgxJTkxJUUzJTgwJTkxZ2l0JTIwZmV0Y2glRTMlODAlODFnaXQlMjBtZXJnZSVFMyU4MCU4MWdpdCUyMHB1bGwlRTMlODElQUUlRTklODElOTUlRTMlODElODQlRTMlODElQUIlRTMlODElQTQlRTMlODElODQlRTMlODElQTYmdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZzPWMwNjg0YjEyYjVmMjI0YzI4OWExMzBkYTg0N2Q0YTEy&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDB3YW5uJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1jZDcyNTg2MjQwNWVmMjIzNWNjODllODliODY5OTRjYg&blend-x=142&blend-y=486&blend-mode=normal&s=c2e77e6a59b2774d75f0af078c557287)
【初心者向け】git fetch、git merge、git pullの違いについて - Qiita
gitで手こずった時に色々ググってると、「git fetch」と「git pull」がぐちゃぐちゃになってしまったのでまとめておきます。結論から言えば、「fetchもpullもリモートリポジトリの…
コメント