#作成したファイルがプッシュ出来なくなってしまった
VSCodeで作成したphpファイルをGitに上げたいと思い、GitHubでレポジトリを作成し上げようとしたら、何故か出来なかったので、備忘録として寄稿することに致しました。
※ちなみにこれは初回ではなく、2回目の出来事なので、VSCodeからGitに接続を行うといった初期設定は省いています。
#行ったこと
##GitHub
リポジトリの新規作成画面にて、以下のように設定。
「Create Repository」をクリック後、「READ ME」ファイルがリポジトリ内に作成されていることを確認。
ここで、「Clone or download」でリポジトリのURLをコピーしました。
##VScode
上げたいファイルが格納されているフォルダに移動し、リモートリポジトリ追加のコマンドをターミナルで実行。
git remote add origin 作成したリポジトリのURL
リモートリポジトリ追加後、「git pull origin master」でリモートリポジトリをローカルに持って来ようとしたところ、以下のようなエラーが発生しました。
$ git pull origin master
From https://github.com/fuzzy-yusuke/test
* branch master -> FETCH_HEAD
fatal: refusing to merge unrelated histories
どうやら、マージしようとしたら拒否された模様。
#fetchとrebaseで解決
検索して調べると、「git fetch」と「git rebase」のコマンドを実行すると、プッシュが成功したとありましたので、早速実行すると、無事作成したGitHubのリポジトリに上げることが出来ました。
ちなみにこの二つの意味は下記の通りです。
fetch:リモートリポジトリの最新データを取得すること。
これを行うことで、ファイルの競合を防ぐことが出来ます。
rebase:作業が完了したブランチを、分岐元のブランチ(今回の場合はmaster)にくっつけること。
#git mergeも行う(2020/04/24 追記)
最近またこのエラーに遭遇したため、上記の方法を試しましたが、エラーが解決出来ませんでした。
そこで、以下のコマンドを実行しましたが、上手くコミット出来ました。
$git merge --allow-unrelated-histories origin/master
merge:修正・変更したブランチを元のブランチに統合させること。
#原因は何だったのだろうか
出力されたエラーメッセージをググったり、発生したことや実行した手順等を元に記事を探ったところ、GitHubのリポジトリには「READ ME」のファイルがあるのに、ローカルのフォルダに無かったことが原因である可能性が高いと考えました。
そんな状態で「fetch」でリモートリポジトリの最新状態を取得せずにプッシュしようとしたが為に、マージが拒否されてしまったものだと思われます。
前回上手くプッシュ出来たのは、おそらく「READ ME」を作成しなかったからだと思われます。(この時はノートを残していなかった…)
(2020/04/24 追記)
又、ローカルにリポジトリを作成する前にREADME.mdをリポジトリから削除したため、「README.mdを削除した。」という別の分岐のヒストリーを残したままコミットしようとしてしまったから、fetchとrebaseだけではダメだった...と考えました。
「確認と更新は大事」ということを今回で学びました。
(というかREADME.mdが要らない時は最初から作らない。)
#参考文献
・[git push -u origin masterでrejectにハマる]
(https://qiita.com/watsuyo_2/items/aa95e54c4974a80123e9)
・[【git】git pushがrejectされたときの対応方法]
(https://www.softel.co.jp/blogs/tech/archives/3569)
・[初めてGitHubリポジトリにpushしたらrejectedエラーになったときの対応メモ]
(https://qiita.com/takanatsu/items/fc89de9bd11148da1438)