VueCLIやNuxtで作成したプロジェクトをGitHubにpushする方法

最終更新日:2020年2月18日 Git

VueCLIで作成したプロジェクトをGitHubにpushしようとしたら、エラーで詰まったので流れと解決策を備忘録にまとめておく。

まず、VueCLIにてプロジェクトを作成した後、以下のようにgit initでプロジェクトルートをgitの管理下におく。

そして、git add、git commitでプロジェクトの中身をgitにコミットする。

続いて、githubにて新規でリポジトリを作成する。

そして、以下のようにgit remote addでリモートリポジトリとローカルリポジトリの紐付けを行う。

これにより、originという名前で、リモートリポジトリのURLが参照可能になる。

さらに、git push origin masterでローカルの変更(プロジェクトの中身一式)をリモートリポジトリに反映させる。

ところが、ここでエラーが発生。

Updates were rejected because the remote contains work that you do not have locally. This is usually caused by another repository pushing to the same ref. You may want to first integrate the remote changes (e.g., ‘git pull …’) before pushing again. See the ‘Note about fast-forwards’ in ‘git push –help’ for details.

リモートにはローカルにない作業が含まれているため、更新は拒否されました。これは通常、別のリポジトリが同じ参照にプッシュすることで発生します。再度プッシュする前に、最初にリモートの変更(たとえば、「git pull …」)を統合することができます。詳細については、「git push –help」の「早送りに関する注意」を参照してください。

 

実は、リモートリポジトリを作成した後に、誤ってリモート側でREADMEファイルを作ってしまっていた。

そして、そのファイルが不要とわかり削除したので、リモートの歴史が進んでいる。

そのために、いったんリモートの変更をローカルに取り込まないとpushできないのであろう。

 

とりあえずpullしてリモート側の変更をローカルに取り込めばいいのではと考えて、git pull origin masterを実行したが、失敗。

しかも、pullの段階でfatal:refusing to merge unrelated historiesというエラーが出ている。

無関係な歴史を持つ2つのブランチはマージできないと・・・。

そこでこのエラーを調べると、–allow-unrelated-historiesをつけることで、マージ可能になるようだ。

git merge –allow-unrelated-histories origin/master

githubを確認すると、ローカルリポジトリのプロジェクトの内容がリモートリポジトリに反映されている。

補足1 リモート追跡ブランチ

今回、margeコマンドにて、リモートリポジトリの最新状態をローカルリポジトリに取り込み、その後にローカルの内容をリモートリポジトリにpushさせた。

このとき、git merge –allow-unrelated-histories origin/masterコマンドのorigin/masterは、リモートリポジトリの最新状態を示している。

origin/masterは、正確にはremotes/origin/masterというリモート追跡ブランチである。

以下のようにgit branch -aで確認できる。

補足2 リモートに変更がない場合

githubでリモートリポジトリを作成した後、特に変更を加えない場合は、pullやfetch+margeする必要もなく、マニュアル通り以下の順に実行するだけで、ローカルのプロジェクトをgithubにプッシュできる。

git remote add origin https://github.com/yukito234/job_change_success_demo.git

git push -u origin master

 

参考サイト

https://www.shookuro.com/entry/2018/11/16/121334

https://qiita.com/takanatsu/items/fc89de9bd11148da1438

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です