git初心者が躓いたgit push origin masterのエラーについて
github初心者が以下の記事を参考に、githubを使ってみた。
https://techacademy.jp/magazine/6235
●エラー概要
ローカルリポジトリの変更を、GitHub上にあるリモートリポジトリに反映させるためのpushしたところエラーが発生した。
●エラー詳細
・実施したコマンド
git push origin master
・コマンドに対しての結果
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
●エラーの原因
GitHubでリポジトリを作成したタイミングで、README.mdの作成にチェックを入れていたため、README.mdはリモートリポジトリ上に存在する。一方でローカルリポジトリ上には、新規に作成したファイルが存在する。
ローカルリポジトリとリモートリポジトリに差が発生しているにも関わらず、ローカルリポジトリの内容をリモートリポジトリへプッシュして反映させようとしていたためである。これがまかり通ると、リモートリポジトリのファイルが消えて、ローカルリポジトリと同じ内容が反映されてしまう。
●解決策
以下のコマンドを打てば、解決する。
・git merge --allow-unrelated-histories origin/master
●解決策の説明
エラーの原因に書いた通り、ローカルとリモートの内容が異なる状態となっている。これは、それぞれが無関係なヒストリを持つ状態ということだ。この状態を解決するための無関係なヒストリをマージするコマンドである。
このコマンドを打つことで、ローカルとリモートは、同じ状態になる。つまりそれぞれが持っていた異なる1ファイルがどちらにも反映されて、それぞれのリポジトリが2ファイル保有する状態となる。