LoginSignup
0
0

Githubにプッシュしようとするとエラーを吐く問題を解決する

Posted at

今まではGithubにpushするときにエラーになれば-fオプションをつけてpushしてGithubの方をローカルにすべて合わせるみたいなことしてましたが、そろそろちゃんとした解決策を探ろうと思った。

(本番環境でやるのは怖いので、実験用にtest_repositoryというディレクトリをWindowsのデスクトップに作成して実験。)

状況

  1. ローカルレポジトリを初期化
  2. Githubのサイトでレポジトリを作成
  3. Githubのサイト上でREADME.MDを編集
  4. 以下のコマンド(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オプションを付け、別々のブランチを統合してあげるとうまくいく。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0