【Git】error: failed to push some refs toの原因と解決方法の備忘録

5,495views

個人開発しかしないので正直gitのメリットを感じてなかったゆひゃですが、最近WordPressのプラグインやPHPライブラリなどのコンポーネントあたりの開発をするようになってちゃんと使い始めました。

まだgit初心者なのでpushのタイミングで毎回エラーが出てる気がします。

今回は初回によく出てくるエラーが出た時の解決方法で気になったコマンドのオプションについて調べていきます。

目次

  1. まとめ

解決方法

今回はこの方の記事を参照させてもらいました。

(Git) git init ~ git push で詰まった話。めっちゃrejectされる「引用:ちゃんとメモとったか?

今回は

git fetch
git merge --allow-unrelated-histories origin/main

で解決できました。

このコマンドを入力するとローカルにリモートで追加されていたファイルが追加されました。

問題はGitHubのリポジトリを作成した時、LICENSEファイルを生成したためローカル環境の履歴と異なったことが原因だったのだと思われます。

--allow-unrelated-historiesオプションはなんだ

今回、fetchの後にmerge origin/mainをしたところ

fatal: refusing to merge unrelated histories

と表示されたので、--allow-unrelated-historiesオプションをつけたわけですね。

このオプションはどういう意味なのか調べてみます。

unrelated historiesは

A---B       リモートリポジトリ
C---D---E   ローカルリポジトリ

となっている状態です。オプションをつけてマージすると

  A---B     リモートリポジトリ
     \
C---D---E   ローカルリポジトリ

の状態になります。

本来マージするためには、同一の枝から分岐している必要があるんですね。このオプションをつけることで、同一の枝から分岐していないリモートリポジトリの情報を強制的にローカルリポジトリに反映させることができるわけでした。

GitHub初回Pushで発生する理由

初回のプッシュで頻発するエラーなのですが、GitHub側で新しいリポジトリを作成した際に、Readme.mdも自動作成することが原因のようです。

Readme.mdを作成することでGitHub側でリポジトリの枝がスタートします。ローカルでも開発を進めているため、ローカル側でgit initすることでリポジトリの枝がスタートしているので、このエラーが発生してしまいます。

まとめ

今回はGitHubへPushをしたときに起こるエラーについて原因と方法を詳しく見てみました。

プログラム作成先行でリポジトリを作成した場合、起こってしまいがちなエラーだと思います。今後はGitHubでREADME.md とLICENSEを作成してからcloneしてpushしようと思います。

カテゴリー