【Git Hub連携】ローカルPCとGitHubの連携の際に出たエラーと解決方法

ローカルPCとGit Hubの連携の際に少し詰まったので、解決方法となぜ詰まったのかを特定しました。

やりたかったこと

UnityプロジェクトをGitHubで管理

エラー時の状況

ローカルリポジトリを作成し、以下のようにファーストコミットまで終了。

git init
git add .
git commit -m "Initial commit"

次にGitHubでリモートリポジトリを作成(READEMEも同時に作成)。

ローカルリポジトリからリモートリポジトリにpush。

git remote add origin https://github.com/<ユーザー名>/<リポジトリ名>.git
git push -u origin main

しかし、以下のようなエラーが出ました

To https://github.com/user-name/anti-pattern.git
 ! [rejected]        main -> main (fetch first)
error: failed to push some refs to 'https://github.com/user-name/anti-pattern.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. If you want to integrate the remote changes, use
hint: 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

連携がうまくいかなかった原因

Git Hubでリポジトリを作成した際に、READEMEを一緒に作成したことでmainブランチにコミットが発生していた。

ローカルではmainブランチでファーストコミットを別の形で行っているため、履歴が異なる。

リモートとローカルの履歴が異なるにもかかわらず、pushしようとしていたことでコミットのコンフリクトのようなことが起きていた。

対処方法

以下を実行する。

git pull origin main --rebase

リモートリポジトリから最新の変更を取得し、ローカルの変更をリモートの変更に 「積み重ねる」 形で履歴を整えることができるためコンフリクトが解消できます。

もう一度push。

git push -u origin main

これでうまくいきました。

根本的に問題を起こさない方法

根本的に問題を起こさない方法は

  • リモートリポジトリ作成時にコミットを発生させない(READEMEや.gitignore, ライセンスファイルを作成しない)
  • ローカルでコミットを行う前にpullを行う

です。

READEMEを作成しなければリモートでコミットが発生しないので、コンフリクトは起きないです。

ローカルでコミットを行う前にpullを行う

ローカルでコミットを行う前にpullを行うパターンは以下のような流れです。

リモートリポジトリを作成する(READE.MEも同時に作成)。
この時、リモートではREADE.MEを作成したことでコミットが1つ発生する。

以下のコマンドを実行することで、ローカルでリポジトリを作成し、リモートを追加したあとpullを行います。これはリモートで発生したコミットを先に取り込むためです。

git init
git remote add origin https://github.com/<ユーザー名>/<リポジトリ名>.git
git pull origin main

これで今
 リモート:READEME
 ローカル:READEME・作成したファイルやディレクトリ
という状態です。

次にローカルで作成したファイルやディレクトリをaddし、commitをしてリモートにpushをする

git add .
git commit
git push origin main

これでリモートとローカルが同じ状態になりました。

なので、うまくいったと言えます。

ここからローカルでブランチを切って作業してリモートにpushできます。

コメント

タイトルとURLをコピーしました