Cloud ShellでGitHubハンズオン (3) fork, clone, merge の流れ

0.はじめに

これまで、add,commit,push の使い方と、clone, merge, pull の使い方を学んできました。
今回は、他の人が公開しているプロジェクトに参加したり、そのコードを安全に自分の環境で試したりするための重要な機能である「Fork (フォーク)」について学習していきます。

1.基本的な用語

1.1.Forkとは?

Forkとは、GitHubの機能の一つで、他のユーザーが公開しているリポジトリを、自分の GitHub アカウントに丸ごとコピーすることを指す。

コピーして作成されたリポジトリ(Fork したリポジトリ)に対しては、自分の所有物として扱われ、自身の管理下で自由にコードの編集など検証することが可能となる。

そして元のプロジェクト(Fork 元)にとって有益だと考えられる場合、その変更を取り込んでもらうように「プルリクエスト」を送ることも可能で、元のプロジェクトの所有者があなたの「プルリクエスト」内容を確認し、問題がなければマージ(統合)することも可能です。

1.2.clone と Fork の違い

項目 git clone Fork (GitHub 機能)
目的 リモートリポジトリをローカル環境にコピーする 他のユーザーのリポジトリを自分の GitHub アカウントにコピーする
実行場所 ローカル環境のターミナル GitHub の Web サイト
元のリポジトリとの関係 通常 origin として接続。
Push 権限がなければ直接変更不可。
GitHub で Fork 元との関連が記録。
自分の Fork リポジトリには自由に Push が可能。
Fork 元への変更提案は Pull Request で実施

2.ハンズオン

前提条件

  • GitHubにアカウントが作成済みである
  • GoogleCloud の CloudShell環境から実施

本ハンズオンの想定フロー

①Fork して自分の GitHubアカウントにコピー
②clone して自身のローカルで作業
③ローカルで作業後、自分の Fork リポジトリに Push し、Fork元に「プルリクエスト」
④Fork元で「マージ」の判断

2.1.Fork して自分の GitHubアカウントにコピー

今回は、GitHub が公式に用意している練習用のリポジトリ octocat/Spoon-Knife を使います。
スプーン、ナイフときたら??フォークです! fork していきましょう!

2.1.1.Fork 画面へ遷移

2.1.2.Fork の実行

以下を確認して赤枠の「Create fork」を押下

  • 橙色:Owner/Repository name:Fork先(自分のGitHubアカウント/リポジトリ名)
  • 緑色:Copy the main branch only:コピーするブランチ(mainブランチのみをコピー)
    file

2.1.3.Forkしたリポジトリの確認

  • 2.1.2.Fork の実行後、自動的に自身の画面遷移される
    そちら画面より Forkされていることを確認
    file

2.2.clone して自身のローカルで作業

2.2.1.GitHubクローンを実施

  • リポジトリをクローンする際は、YOUR_USERNAME 部分を、あなたの GitHub ユーザー名に置き換えて実行してください
# GitHubからリポジトリをクローン
git clone git@github.com:YOUR_USERNAME(例:tetutetu214)/Spoon-Knife.git

# クローンされたディレクトリに移動
cd Spoon-Knife

# 中身を確認
ls

2.2.2.ブランチ作成・変更

# 新しいブランチを作成し切り替え
git switch -c add-my-info

# ブランチの一覧を確認(*がついているのが現在のブランチ)
git branch
* add-my-info
  main

# READMEに変更(YOUR_NAME部分は適宜置き換えてください)
echo "" >> README.md
echo "This repository was forked by YOUR_NAME (例:tetutetu214)." >> README.md

# 変更内容を確認します(最終行に追加を確認)
cat README.md

2.2.3.変更のコミット・push

# 変更をステージング
git add README.md

# 変更をコミット
git commit -m "Add contributor information to README"

# コミット履歴の確認
git log --oneline

# 変更をGitHubにプッシュ(ここまでのブランチの切り替え、変更を反映させる)
git push -u origin add-my-info

2.2.4.GitHubでの反映確認

  • 上段赤枠部分の「ブランチ」を「main」から「add-my-info」に切替える
    file

2.3.Fork元に「プルリクエスト」

  • こちらの操作は、GitHub上で実施をします

2.3.1.プルリクエストページ遷移

  • リポジトリページ上部「Compare & pull request」ボタンを押下
    file

2.3.2.プルリクエスト先の設定

  • 自身の変更を元のリポジトリに対して、プルリクエストをする設定
  • 今回は「base repository が Fork 元 (octocat/Spoon-Knife)」で、「head repository が自分の Fork リポジトリ (あなたのユーザー名/Spoon-Knife)」 であることを確認。
    file

2.3.3.プルリクエストの実施

  • 画面右下赤枠部分の「Create pull request」を押下
    octocat/Spoon-Knife は練習用リポジトリのため、送ったプルリクエストが実際にマージされることは通常ありません。
    file

2.3.4.プルリクエストの確認

  • 元の「octocat/Spoon-Knife」の「Pull requests(赤枠部分)」にプルリクエストが反映されたことを確認
    file

2.4.Fork元で「マージ」の判断

  • こちらは「octocat/Spoon-Knife」の管理者により判断されるため、自身では実行不可

3.おわりに

3.1.得られた知見

  • GitHub上でリポジトリをForkする具体的な手順を学ぶ
  • ローカルコピー(Clone)とGitHubアカウントへのコピー(Fork)の目的と使い分けを理解した

    3.2.今後の課題

  • Pull Requestを送った際に発生しうるコンフリクトとその解消方法
Last modified: 2025-04-20

Author