---

こんにちは〜

git pushでエラーになった時のメモ

  • Xcodeで新しいプロジェクトを作る
  • pushする
  • よくわからなくなったので、Xcodeのプロジェクトを消す
  • Xcodeのプロジェクトを作り直す

としたらgit pushでエラーになったのでどうしたかまとめる

エラー

commitして

$ git commit -m "✨ splash画面追加"
[master 9e14b6d] ✨ splash画面追加
 9 files changed, 69 insertions(+), 5 deletions(-)
 create mode 100644 hoge/Assets.xcassets/logo.imageset/logo.png
 create mode 100644 hoge/Assets.xcassets/logo.imageset/logo@2x.png
 create mode 100644 hoge/Assets.xcassets/logo.imageset/logo@3x.png

pushするとエラーになる

$ git push origin master
To gitlab.com:hoge/hoge.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@gitlab.com:hoge/hoge.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

pullしてもエラーが出る

$ git pull
fatal: refusing to merge unrelated histories

解決方法

$ git fetch
$ git merge --allow-unrelated-histories origin/master
Already up to date!
Merge made by the 'recursive' strategy.

上記コマンドでOK

--allow-unrelated-historiesについて

git2.9から、無関係なヒストリを持つ二つのブランチをマージできなくなった。
--allow-unrelated-historiesをつけるとマージできるようになる。

https://osyoyu.hatenablog.com/entry/2017/02/24/012531

このオプションが入ったのにはちょっと面白い経緯がある。Linux kernel に新しいファイルをコミットしようとした人が GitHub のヘルプを見つつ、新しいリポジトリを作り、 kernel にそれを git merge したところあっさり成功してしまって、それに誰も気づかないまま Linux kernel に親のないコミットが追加されてしまったらしい。

結局Linusが気づき、共通の親コミットを持たないブランチ同士はデフォルトでマージできないようにするべきという話になったようだ。

ということらしい。

確かに作り直してるから共通のヒストリじゃないし共通の親コミットもない。

参考