😽 yumenomatayume.log

GitHub Fork 元リポジトリからブランチを作成する方法

GitHub で fork したリポジトリがあるのですが、fork 元リポジトリのブランチを作成元として、fork したリポジトリに新規ブランチを作成します。

そもそも fork とは?

そもそも fork とは、ユーザーが管理するリポジトリのコピーを作成することです。

OSS など、ユーザー自身が管理していないリポジトリは直接変更することができません。そのため一度 fork してユーザー自身が管理するリポジトリを作成します。fork したリポジトリに対してユーザー自身で変更を加え、fork 元リポジトリに対して PR を作成してマージされることで、OSS にコントリビュートできます。

なぜ fork 元からブランチを作成するのか?

fork した目的が「OSS にコントリビュートすること」であれば、fork 元からブランチを作成する必要は基本的にありません。なぜなら、fork したリポジトリに加えた変更は、fork 元にマージされてほしい内容のみになっているからです。

ではどのような時に fork 元からブランチを作成する必要があるでしょうか。

fork したリポジトリを個人用途向けにカスタマイズをしている」場合です。fork 元にマージされて欲しくない内容が main ブランチにコミットされています。

easy-notion-blog(本ブログ)もそうですが、以下を実現するために fork したリポジトリを運用しています。

  • 個人用途向けにカスタマイズしたい
  • fork 元の更新を取り込みたい
検証環境

前置きが長くなりました。

最近 fork した easy-notion-blog を例に説明します。具体的には以下のような環境で試してみます。

作成元作成先
リポジトリotoyo/easy-notion-blogymmmtym/easy-notion-blog
ブランチmainfeature/test

ちなみにブラウザ上では以下の画面の「New branch」から作成できます。

画像が読み込まれない場合はページを更新してみてください。
ローカルリポジトリでの方法

ローカルリポジトリで同様のことをやってみます。

fork したリポジトリに移動して git remote で remote リポジトリの一覧を確認します。

❯ git remote -v
origin  ssh://git@github.com/ymmmtym/easy-notion-blog.git (fetch)
origin  ssh://git@github.com/ymmmtym/easy-notion-blog.git (push)

ここでは、origin(fork 先)の情報しか登録されていないので、upstream(fork 元)を追加して fetch(更新)します。

git remote add upstream ssh://git@github.com/otoyo/easy-notion-blog.git
git fetch upstream

upstream が追加されていることを確認します。

❯ git remote -vv
origin  ssh://git@github.com/ymmmtym/easy-notion-blog.git (fetch)
origin  ssh://git@github.com/ymmmtym/easy-notion-blog.git (push)
upstream        ssh://git@github.com/otoyo/easy-notion-blog.git (fetch)
upstream        ssh://git@github.com/otoyo/easy-notion-blog.git (push)

start-point(ブランチの作成元)を upstream/main (Upstream の main ブランチ)に設定し、-c オプションで作成するブランチ名を指定します。

git switch upstream/main -c feature/test

以上でブランチ作成ができました。

これ以降は通常作業を行い、 git push origin feature/test すると自身の GitHub リポジトリにもブランチが作成されます。

👍