非凡な才能をください。

都心でサラリーマンやってます。書きます。

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ファイル保有する状態となる。