【git】git pushがrejectされたときの対応方法
問題
git push しようとしたら、rejectされた。どうしよう。
C:\tmp\gittest\testB>git push c:\tmp\gittest\test master To c:\tmp\gittest\test ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'c:\tmp\gittest\test' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Merge the remote changes (e.g. 'git pull') hint: before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.
答え
自分がリモートの変更をpullしてから、pushするまでの間に、他からのpushがあるなどしてリモートが変更されている状況。
エラーメッセージが教えてくれているように、あなたのブランチの先端はリモートのより後ろになっている。
リモートの変更をマージしてから、改めてpushする。
対応方法 1) とりあえず git pull する
git pull
自動的にマージされて、これでpushできる状態になることもある。
ただ、履歴はこんな感じになる(AさんとBさんが枝分かれして、合流しました)。
対応方法 2)fetch して merge する
git fetch (リモートの変更を取ってきて) git merge origin/master (マージする)
これも上と同じような結果になる。
対応方法 3)fetch して rebase する
rebase で、リモートの変更の後に自分の変更を持ってくることもできる。
git fetch (リモートの変更を取ってきて) git rebase origin/master
履歴はすっきりする(Aさんの変更の後に、Bさんの変更が入りました)。
対応方法 4)pull –commit や pull –rebase する
これでも何とかなるようだが、無理してpullコマンドを使わなくてよい。
fetchとmergeとrebaseで何とかなる。
競合が単純ではない場合、自動でマージされないので、手作業での修正が必要なこともある。
C:\tmp\gittest\testB>git pull remote: Counting objects: 10, done. remote: Compressing objects: 100% (4/4), done. remote: Total 6 (delta 2), reused 0 (delta 0) Unpacking objects: 100% (6/6), done. From c:/tmp/gittest/test a131725..46abd9b master -> origin/master Auto-merging test.txt CONFLICT (content): Merge conflict in test.txt Automatic merge failed; fix conflicts and then commit the result. ↓ マージしてからcommit、pushする
Github初心者によるGithub入門〜Githubでソースコードを共有しよう編〜 | ロボット工学者の卵がマインドストームでいろいろやる 2014年11月3日 08:14
[…] 参考 : Qiita – GitHubの初期設定(SSH接続からリポジトリへのpushまで) yk5656 diary – GitHubにリポジトリを作成してみる Softelメモ – 【git】git pushがrejectされたときの対応方法 […]