Gitでローカルプロジェクトを既存のリモートリポジトリと統合する方法(--allow-unrelated-histories)
この記事は、すでに作成済みのローカルプロジェクトを既存のリモートリポジトリと統合する方法を説明します。
ユースケース
- XcodeやAndroid Studioなどの開発ツールがプロジェクト作成時に自動でGitリポジトリを初期化している
- ローカルで開発を進めていたが、既存のリモートリポジトリを利用して管理する必要がある
対象のリモートリポジトリ構成
この記事では、次のような構成のリモートリポジトリを前提としています:
- メインブランチ (main): 本番環境で使用する安定版コードを管理するためのブランチで、通常は直接開発を行いません
- 開発用ブランチ (develop): 開発中のコードや新機能を実装する際に使用されるブランチ
事前準備
- Gitがインストールされていること
ターミナルで次のコマンドを実行し、Gitがインストールされているか確認してください:
git --version
Gitがインストールされていない場合は、公式サイトのインストール手順に従ってください:
手順
1. リモートリポジトリからdevelopブランチを取り込む
リモートリポジトリのURLを追加する:
git remote add origin <リモートリポジトリのURL>
developブランチを作成し、切り替える:
git checkout -b develop
すべてのローカルファイルをステージングに追加する:
git add .
ローカルの変更をコミットする:
git commit -m "backup local changes before pulling"
リモートからdevelopブランチを取り込む(異なる履歴を許可する):
git pull origin develop --allow-unrelated-histories
Gitのヒントが表示された場合
Gitが次のようなヒントを出すことがあります:
hint: You have divergent branches and need to specify how to reconcile them.
mergeを選択する場合は次を実行する:
git config pull.rebase false
変更内容を反映するため再度プルします:
git pull origin develop --allow-unrelated-histories
コンフリクトが発生した場合:
リモートとローカルの変更が競合すると、次のようなメッセージが表示されます:
CONFLICT (content): Merge conflict in <ファイル名>
Automatic merge failed; fix conflicts and then commit the result.
対象のファイルの競合を解決し、変更をコミットする:
git add .
git commit - m "resolved merge conflict in <ファイル名>"
2. リモートに変更をプッシュする:
git push origin develop
3. ローカルブランチを整理する
不要なローカルブランチによる混乱を防ぐため、ローカルのmainブランチを削除する:
git branch -D main
リモートブランチの情報を更新する:
git fetch
このコマンドはリモートの変更履歴を更新するだけで、ローカルの状態には影響しません。
これで、ローカルプロジェクトが既存のリモートリポジトリに統合されました! 🎉