git pushでリジェクトが起こった場合
原因
リモートリポジトリへpushするまでに、他のエンジニアがリモートリポジトリへpushなどをし、リモートリポジトリが変更されていると発生するエラー。
! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'c:\tmp\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.
解決策
解決策は3通りあります。
履歴が綺麗になるのは方法3。
現場によってそれぞれルールが違うと思うので確認してください。
方法1「git pullする」
こちらはマージコミットが作成されます。(履歴が枝分かれし、見た目があまり綺麗ではない)
手順
#リモートの変更を取り込む $ git pull #pushするとマージコミットが作成される $ git push
方法2「fetchしてからmergeする」
こちらも方法1と同じくマージコミットが作成される。
手順
#リモートの変更を取ってくる $ git fetch #マージする $ git merge origin/master $ git push
方法2「git rebaseする」
git rebaseとは、「リモートリポジトリから取得した状態に対して、ローカルリポジトリでコミットを行った」という扱いになる操作。
こちらは方法1と違って、マージコミットが作られないので履歴が綺麗になります。
手順
#リモートの変更を取ってくる
$ git fetch
$ git rebase origin/master
$ git push
参考サイト
【 git push 】コマンド(応用編)――リジェクトやコンフリクトが起きたときどうするか:Linux基本コマンドTips(398) - @IT