GitでPushしようとしたらエラーによりPullできなくて、「あー、プルが必要なのね」となってpullしようとしてもプル出来ない場合があります。
その場合の対策です。
1 2 3 4 5 6 7 8 9 |
$ git push -u origin master To https://github.com/YOURNAME/REPOSITORY.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'https://github.com/YOURNAME/REPOSITORY.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. |
エラーメッセージ
Updates were rejected because the tip of your current branch is behind its remote counterpart. Integrate the remote changes (e.g. ‘git pull …’) before pushing again. See the ‘Note about fast-forwards’ in ‘git push –help’ for details.
日本語訳
現在のブランチの先端がリモートのブランチの背後にあるため、更新は拒否されました。もう一度プッシュする前に、リモートの変更( ‘git pull …’など)を統合します。詳細については、「gitpush–help」の「早送りに関する注意」を参照してください。
原因
リモートリポジトリ上で新しいコミットが発生しており、ローカルリポジトリ上にも別のコミットが発生している。
この場合、プルするのが普通であるが、上流ブランチを指定していない場合はプルしても以下のメッセージが出てハマります。私のように 上流ブランチをPullコマンドで設定している人はパニックになると思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$ git pull remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), 662 bytes | 16.00 KiB/s, done. From https://github.com/YOURNAME/REPOSITORY ae19510..835c3a3 master -> origin/master There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details. git pull <remote> <branch> If you wish to set tracking information for this branch you can do so with: git branch --set-upstream-to=origin/<branch> master |
対策1
対策はいろいろあります。
Gitはいつもそうなんですが、答え書いてます。
1.上流ブランチを設定する
1 |
$ git branch --set-upstream-to=origin/master master |
Gitポケットリファレンス P.121 参照
2.プルする
1 2 3 4 5 6 |
$ git pull hint: Waiting for your editor to close the file... Merge made by the 'recursive' strategy. README.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 README.md |
3.プッシュする
まだリモートリポジトリに渡せてないコミットがあるので、プッシュします。
ここでコンフリクトが発生するかもしれません。
1 2 3 4 5 6 7 |
$ git log --oneline 0729bac (HEAD -> master, origin/master) Merge branch 'master' of https://github.com/YOURNAME/REPOSITORY b25432d dd 835c3a3 Update README.md 8c2f0ab dd ae19510 Create README.md b6bc93e dd |
対策2
以下のやり方でもよいでしょう。ブランチを指定してプル、プッシュ
1 2 |
$ git pull origin master $ git push origin master |
おすすめ書籍は、Gitポケットリファレンスです。