skip to content
barorin&?

Gitのupstreamを使ってフォーク元の変更を取り込む方法

/ 4 min read

Table of Contents

はじめに

GitHubで他の人のリポジトリをフォークして開発を進めていると、元のリポジトリ(upstream)の変更を自分のリポジトリに取り込みたいケースがあります。 この記事では、upstreamを使って安全に変更を取り込む方法を説明します。

方法

0. upstreamの追加

まず、オリジナルのリポジトリをupstreamとして登録します。

Terminal window
$ git remote add upstream https://github.com/original-owner/original-repo.git

なお、他ユーザーのリポジトリをクローンした場合は、originを自分のURLに変更しておきます。

Terminal window
$ git remote set-url origin https://github.com/your-username/your-fork.git

1. リモートリポジトリの確認

まず、現在のリモートリポジトリの設定を確認します。

Terminal window
$ git remote -v

以下のような出力が表示されるかと思います。

Terminal window
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. 更新手順

カスタマイズした内容を守りながら更新するために、以下の手順を推奨します。

  1. バックアップブランチの作成
Terminal window
# 現在の状態を別ブランチに保存
$ git checkout -b backup-customization
# mainブランチに戻る
$ git checkout main
  1. テストブランチでの更新確認
Terminal window
# テスト用のブランチを作成
$ git checkout -b test-upstream-merge
# ブランチの移動を確認
$ git branch
# upstreamのmainブランチから変更を取り込む
$ git pull upstream main
  1. コンフリクトの解決 マージ時にコンフリクトが発生した場合、以下のような競合マーカーが表示されます。
<<<<<<< HEAD
あなたの変更内容
=======
upstreamの変更内容
>>>>>>> upstream/main

各ファイルを確認しながら、必要な変更を選択または組み合わせて保存します。

  1. 本番環境への反映 テストブランチで問題がないことを確認できたら、mainブランチに変更を反映します。
Terminal window
$ git checkout main
$ git merge test-upstream-merge
  1. ブランチの削除 不要になったブランチは削除しておきます。
Terminal window
$ git branch -d test-upstream-merge

3. トラブルシューティング

「fatal: refusing to merge unrelated histories」というエラーが発生した場合は、--allow-unrelated-historiesオプションを使用します。

Terminal window
$ git pull upstream main --allow-unrelated-histories

ただし、このオプションは強制的なマージを行うため、必ずテストブランチで試してから本番環境に反映するようにしましょう。 問題が発生した場合は、以下のコマンドでマージを中止できます。

Terminal window
$ git merge --abort

まとめ

upstreamを使った更新は、慎重に行うことが重要です。必ずバックアップを取り、テストブランチで確認してから本番環境に反映するようにしましょう。 また、重要なカスタマイズ部分は別途ドキュメント化しておくと、将来の更新時の参考になります。