0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【保存版】Git fork元リポジトリ → fork後リポジトリ 反映方法

Posted at

はじめに

最近、GitHubの人気リポジトリについて調査して、fork して実際に使用することが多くなりました。

「fork したけど、どうやってオリジナルの更新を追随すればいいの?」 と疑問に思った方も多いのではないでしょうか。
本記事では、リポジトリのforkから、上流(upstream)の最新更新を自分のforkに取り込むまでをステップごとに詳しく解説します。


全体の流れをざっくり把握しよう

まずは、全体の流れを図で示します。下記のMermaidを見ながら、forkから最新更新の取り込みまでの流れを把握しましょう。

  1. リポジトリのfork
  2. ローカルにクローン
  3. upstream(上流)リモートの設定
  4. 上流の更新を取り込む(フェッチ・マージ or リベース)
  5. 自分のfork先リポジトリにプッシュ

ここから先は、この流れに沿って詳しく説明していきます。


1. リポジトリをforkする

まず最初に行うのが、オリジナルリポジトリのforkです。

  1. forkしたいリポジトリのページにアクセス
    例: https://github.com/オリジナルユーザー/オリジナルリポジトリ

  2. 右上の「Fork」ボタンをクリック
    クリックすると、自分のGitHubアカウントにリポジトリがコピーされます。

  3. fork後の確認
    自分のアカウント内に同名のリポジトリが作成されているはずです。


2. ローカル環境にクローンする

forkしたリポジトリは自分のアカウントにあるだけなので、ローカル環境にクローンして作業可能な状態にします。

git clone https://github.com/自分のユーザー名/forkリポジトリ.git

クローンに成功したら、クローン先のディレクトリに移動して準備完了です。

cd forkリポジトリ

3. 上流(upstream)リモートを設定する

fork元(オリジナル)の変更を取り込むには、upstreamというリモート名でオリジナルリポジトリを登録する必要があります。

  1. upstreamリモートの追加

    git remote add upstream https://github.com/オリジナルユーザー/オリジナルリポジトリ.git
    
  2. リモート設定の確認

    git remote -v
    

    以下のように表示されていれば成功です:

    origin    https://github.com/自分のユーザー/forkリポジトリ.git (fetch)
    origin    https://github.com/自分のユーザー/forkリポジトリ.git (push)
    upstream  https://github.com/オリジナルユーザー/オリジナルリポジトリ.git (fetch)
    upstream  https://github.com/オリジナルユーザー/オリジナルリポジトリ.git (push)
    

4. 上流リポジトリの更新を取り込む

ここが一番大事なステップです。上流リポジトリで更新された内容を、自分のローカルへ反映する方法を見ていきましょう。

4.1 最新の更新をフェッチする

git fetch upstream

これにより、upstream/masterupstream/main といったブランチの最新情報がローカルにダウンロードされます。

4.2 自分のブランチに統合する

ここからは、マージリベースの2つのアプローチがあります。

【方法1】マージする場合

  1. 対象ブランチ(例: master)にチェックアウト

    git checkout master
    
  2. upstream/master をマージ

    git merge upstream/master
    

    ※ ブランチ名が main の場合は適宜読み替えてください。

【方法2】リベースする場合

履歴をきれいに保ちたい場合はリベースがオススメです。

  1. 対象ブランチ(例: master)にチェックアウト

    git checkout master
    
  2. upstream/master に対してリベース

    git rebase upstream/master
    

    競合が発生したら該当箇所を修正し、修正後に以下を実行:

    git rebase --continue
    

5. 自分のfork先リポジトリに更新をプッシュする

ローカルで統合(マージ or リベース)した内容を自分のfork先リポジトリ(origin)にプッシュします。

git push origin master

リベースを行った場合はコミット履歴が書き換わっているため、以下のように強制プッシュ(-f) が必要になる場合があります。使用時は慎重に行ってください。

git push -f origin master

まとめ: forkの更新取り込みは意外と簡単!

  • forkした時点で、オリジナルの更新は取り込まれない
  • upstreamを設定し、fetchでローカルに最新を取得
  • 取り込み方法はマージリベースの2択
  • プッシュして自分のfork先にも変更を反映

どのプロジェクトでも、上流の更新を追随する作業は頻繁に発生します。
こまめに最新の変更を取り込み、常にfork先とオリジナルリポジトリの差分を最小限に保つことが、のちの開発やコラボレーションをスムーズにするコツです。


参考文献

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?