git pushしたときに下記のようなメッセージが表示されrejectされることがあります。
Updates were rejected because the tip of your current branch is behind
この事象について、いろいろな情報を参考にすることができますが、それらでも解決できなかったことがありました。
原因はgit-svnを理解できていなかったこと。
起きた事象の経緯は以下のとおり。
- svnサーバーAからgit-svnでチェックアウト
- 修正をいれて、gitサーバーBにpush
- svnサーバーAにコミット
- 修正をいれて、gitサーバーBにpush
=> reject!!
上記の状態となったとき何が問題になっているかというと、
ステップ3にて、コミット履歴がgit-svnによってステップ1を開始状態として
リベースされていることが問題となります。
ローカルの歴史がリベースされていることでgitサーバーBとは歴史が異なる状態となり
純粋なマージが行えない状態となります。
なので落ち着いて以下の対処を行えばよいようです。
5. gitサーバーBよりpull(マージ)。競合は適切に解決する。
6. 競合をコミットし、再度gitサーバーBにpush。
いろいろやって上記解決にたどりつきましたが、
gitのエラーメッセージだけでは上記の状況を理解するのは困難と思いました。
また、pushはできるようになりますが、コミット履歴はsvnとダブる状態となるなど
きれいな履歴にはならないので要注意です。