はじめに
新しいMacを購入し、すでにGitHub上で作成済みのリポジトリと、ローカル(Mac内)にある既存のディレクトリを連携させようとしました。
しかし、git remote コマンドを打った瞬間からエラーの連鎖に遭遇。
最終的に無事解決できたので、同じ罠にハマった方のために原因と解決策のロードマップをまとめます。
開発環境
- 端末: MacBook Air
- OS: macOS
- やりたかったこと: ローカルにあるLaravelプロジェクトのフォルダを、GitHubの空リポジトリ(README.md付き)と連携して初プッシュする
遭遇したエラーと解決の全記録
エラー1: Gitリポジトリになっていない
fatal: not a git repository (or any of the parent directories): .git
【原因】
ローカルのディレクトリが、まだGitの管理下(.git フォルダが存在しない状態)になっていないのにGitコマンドを打ったため。
【解決策】
ディレクトリを初期化し、最初のコミットをしてからリモートと紐付けました。
git init
git add .
git commit -m "first commit"
git remote add origin <GitHubのURL>
エラー2: 「Add a README file」にチェックしてしまった
! [rejected] main -> main (fetch first)
error: failed to push some refs to '...'
hint: Updates were rejected because the remote contains work that you do not have locally.
【原因】
GitHub側でリポジトリを作る際、「Add a README file」にチェックを入れていたため、GitHub側にだけREADME.mdというファイルが存在していた。
【解決策】
「一度リモートのデータをローカルにダウンロードして合体(pull)させよう」と試みました。
エラー3: pullの合体ルールが決まっていない
歴史を合体させるために git pull origin main --allow-unrelated-historiesを打ったところ、さらにエラー。
fatal: Need to specify how to reconcile divergent branches.
【原因】
Gitに対し、「分岐したブランチをどうやって合体させるか」のルール(マージするのか、リベースするのか)を設定していなかったため。
【解決策】
git config pull.rebase false
git pull origin main --allow-unrelated-histories
エラー4: README.mdのコンフリクト
Auto-merging README.md
CONFLICT (add/add): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
【原因】
Mac側で作った(空の)README.md と、GitHub側で自動生成された README.md がぶつかり、Gitが一時停止した状態。
【解決策】
ローカルのREADMEは空っぽだったので、GitHub側のREADMEを強制採用して上書きし、合体作業を終わらせました。
git checkout --theirs README.md # GitHub側(リモート)のファイルを強制採用
git add README.md
git commit -m "コンフリクトを解消"
最終的な結末
コンフリクト解消が無事に完了したため、プッシュ。
git push -u origin main
まとめ
もし「GitHubにある既存リポジトリ」と「Macのローカルフォルダ」を連携させたい場合、ローカル側にまだ大事なコードがないのであれば、一番最初の段階でgit cloneしてくるのが最も安全でエラーが起きない最短ルートです。
すでにローカルにコードがある場合は、上記のように「統合」と「READMEの衝突回避」が必要になることを覚えておくと冷静に対処できます!