今まではGithubにpushするときにエラーになれば-fオプションをつけてpushしてGithubの方をローカルにすべて合わせるみたいなことしてましたが、そろそろちゃんとした解決策を探ろうと思った。
(本番環境でやるのは怖いので、実験用にtest_repositoryというディレクトリをWindowsのデスクトップに作成して実験。)
状況
- ローカルレポジトリを初期化
- Githubのサイトでレポジトリを作成
- Githubのサイト上でREADME.MDを編集
- 以下のコマンド(Githubでレポジトリを新しく作ったときに表示される画面に書いてあるコマンド)を
test_repositoryというディレクトリで実行。
git remote add origin https://github.com/u-hossy/test_repository.git
git branch -M main
git push -u origin main
そうすると、3行目のコマンドを実行した段階で以下のようなエラーが発生する。
error: failed to push some refs to 'https://github.com/u-hossy/test_repository.git'
またVScodeでpushしようとすると以下のようなエラーとなる。

3行のコマンドが意味すること
git remote add origin https://github.com/u-hossy/test_repository.git
リモートレポジトリ名をoriginとして、test_repositoryを登録するコマンド。
git branch -M main
現在のブランチの名前をmainに強制的に変更する(-Mオプションによるもの)
git push -u origin main
これはoriginというリモートレポジトリのmainというブランチにpushするということを指示したコマンド。ちなみに-uはこのリモートレポジトリのブランチを上流ブランチに設定する(デフォルトに設定するみたいなこと)というコマンドで、これをつけておけば次回からはgit pushだけで実行しても問題ない。
原因
ローカルとリモートでそれぞれにバージョンがあること。これらを統合させないと行けない。
解決策
git pull --allow-unrelated-histories origin main
このコマンドを実行する。そうするとコミットとかが普通にできるようになる。
コマンドの解説
git pull origin mainはリモート(パソコン上でoriginと命名してあるレポジトリのmainというブランチ)から情報をローカルに持ってくるコマンド。これだけだど以下のエラー発生した。
From https://github.com/u-hossy/test_repository
* branch main -> FETCH_HEAD
fatal: refusing to merge unrelated histories
このエラーはローカルとリモートのブランチが共通していないことにより起こるものなので、--allow-unrelated-historiesオプションを付け、別々のブランチを統合してあげるとうまくいく。