Table of Contents
はじめに
GitHubで他の人のリポジトリをフォークして開発を進めていると、元のリポジトリ(upstream)の変更を自分のリポジトリに取り込みたいケースがあります。 この記事では、upstreamを使って安全に変更を取り込む方法を説明します。
方法
0. upstreamの追加
まず、オリジナルのリポジトリをupstream
として登録します。
$ git remote add upstream https://github.com/original-owner/original-repo.git
なお、他ユーザーのリポジトリをクローンした場合は、originを自分のURLに変更しておきます。
$ git remote set-url origin https://github.com/your-username/your-fork.git
1. リモートリポジトリの確認
まず、現在のリモートリポジトリの設定を確認します。
$ git remote -v
以下のような出力が表示されるかと思います。
origin https://github.com/your-username/your-fork.git (fetch)origin https://github.com/your-username/your-fork.git (push)upstream https://github.com/original-owner/original-repo.git (fetch)upstream https://github.com/original-owner/original-repo.git (push)
2. 更新手順
カスタマイズした内容を守りながら更新するために、以下の手順を推奨します。
- バックアップブランチの作成
# 現在の状態を別ブランチに保存$ git checkout -b backup-customization
# mainブランチに戻る$ git checkout main
- テストブランチでの更新確認
# テスト用のブランチを作成$ git checkout -b test-upstream-merge
# ブランチの移動を確認$ git branch
# upstreamのmainブランチから変更を取り込む$ git pull upstream main
- コンフリクトの解決 マージ時にコンフリクトが発生した場合、以下のような競合マーカーが表示されます。
<<<<<<< HEADあなたの変更内容=======upstreamの変更内容>>>>>>> upstream/main
各ファイルを確認しながら、必要な変更を選択または組み合わせて保存します。
- 本番環境への反映 テストブランチで問題がないことを確認できたら、mainブランチに変更を反映します。
$ git checkout main$ git merge test-upstream-merge
- ブランチの削除 不要になったブランチは削除しておきます。
$ git branch -d test-upstream-merge
3. トラブルシューティング
「fatal: refusing to merge unrelated histories」というエラーが発生した場合は、--allow-unrelated-histories
オプションを使用します。
$ git pull upstream main --allow-unrelated-histories
ただし、このオプションは強制的なマージを行うため、必ずテストブランチで試してから本番環境に反映するようにしましょう。 問題が発生した場合は、以下のコマンドでマージを中止できます。
$ git merge --abort
まとめ
upstreamを使った更新は、慎重に行うことが重要です。必ずバックアップを取り、テストブランチで確認してから本番環境に反映するようにしましょう。 また、重要なカスタマイズ部分は別途ドキュメント化しておくと、将来の更新時の参考になります。