今までは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
オプションを付け、別々のブランチを統合してあげるとうまくいく。