#はじめに
bitbucketで新しいリポジトリを作って、そのリポジトリに最初にpushするときにつまづきました。その時の解決法と原因を記録しておこうと思います。
##bitbucketで新しいリポジトリを作る
bitbucketで新しいリポジトリを作ります。
ここで自分は「READMEを含めますか?」の欄で「Yes」としてREADMEを一緒に作成しました。
##作ったリポジトリに向けて最初のpushをする
ローカルリポジトリでファイルを編集、add、commitまで行って、pushをするというところでerrorとなりました。
(作業ブランチはmasterです)
sada@lynx:~/デスクトップ/training$ git push --set-upstream origin master
To bitbucket.org:***/***.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'git@bitbucket.org:***/***.git'
ヒント: Updates were rejected because the remote contains work that you do
ヒント: not have locally. This is usually caused by another repository pushing
ヒント: to the same ref. You may want to first 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をしてみろ」とあるので実行してみると、pullでもエラーとなりました。
fatal: refusing to merge unrelated histories
##解決法
過去に全く同じように問題に合われていた方がいたので、参考にさせていただきました。
pullのときのエラー文にあるように、無関係なヒストリーを持ったブランチ同士であるため、mergeができなかったようです。
ちゃんと調べてみたところ
Git 2.9から mergeコマンドとpullコマンドでは,--allow-unrelated-historiesを指定しない限り,無関係なヒストリを持つ2つのブランチをマージすることはできなくなった。
とありました。
結果的には「--allow-unrelated-histories」オプションを指定することでpullが成功でき、pushできました。
##なぜ無関係なブランチだと言われたのか
参考元の記事でも同様の考察がされていますが、どうやら最初にREADMEを一緒に作ってリポジトリを作成したことが原因のようです。
bitbucketのブランチを見てみると、READMEが「initial commit」になっています。
- リモートのmaster -> READMEをcommit
- ローカルのmaster -> 別ファイルをcommit
リモートとローカルでそれぞれ別の過程でcommitが行われた結果、無関係なブランチと判断されたようです。