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

0.はじめに

前回ブログで基本的な「add,commit,push」を学習をしたので、そこからもう一段踏み込んでGitHubを利用できるようにしていきたいと思います。

有名サイトも参考にしつつ、実際に手を動かして確認した記録としてまとめました

1.基本的な用語

1.2.1.本ブログでの概念図

file

1.2.2.Git操作コマンド

No. 本ブログの対象 操作名 詳細
1 前回記載 add 変更をステージングエリアに追加すること
2 前回記載 commit ステージングエリアからリポジトリに保存すること
3 前回記載 push ローカルリポジトリのコミット履歴をGitHubのリモートリポジトリにアップロード(同期)すること
4 clone GitHubのプロジェクト(自分のものでも他人のものでも)を「ローカル環境(このハンズオンではCloud Shell)」にダウンロードすること
5 merge あるブランチの変更を別のブランチに統合すること
6 pull GitHubの最新の変更をローカルリポジトリに取り込むこと
7 次回記載 fork GitHub上の他人のプロジェクトを「自分のGitHubアカウント」にコピーすること

1.2.3.Gitの概念

No. 本ブログの対象 用語 詳細
1 前回記載 リポジトリ(リモート/ローカル) コードやファイル、変更履歴などの保存場所
2 前回記載 ステージングエリア コミット(変更の保存)する前に、変更を一時的に準備しておく場所
3 ブランチ(リモート/ローカル) メインのコードから分岐した作業スペースのこと
4 プルリクエスト(PR) 自分の変更を他の人に確認してもらい、メインブランチにマージしてもらうリクエスト

2.ハンズオン

前提条件

  • GitHubにアカウントが作成済みである
  • GoogleCloud の CloudShell環境から実施
  • 前回ブログの作業が完了していること

2.1.GitHubを使う(clone)

  • 前回作成した、以下のようなリポジトリの赤枠(上段側)で囲った緑部分(<>Code)を押下し、「SSH」タブを選択し自身の Clone URL(下段側の赤枠)を控えてから実施。
    file

2.1.1.GitHubクローンを実施

# クローンの学習のため、もとのファイルを削除
rm -rf my-first-repo

# GitHubからリポジトリをクローン
git clone git@github.com:tetutetu214/my-first-repo.git

# クローンされたディレクトリに移動
cd my-first-repo

# 中身を確認
ls
README.md

2.1.2.ファイルを追加して、メインブランチに直接コミット

# 新しいPythonファイルを作成
cat > Hello.py << 'EOF'
import functions_framework

@functions_framework.http
def hello_http(request):
    return 'Hello GitHub!'
EOF

# ステータスを確認(コメント:Untracked files)
git status

# ファイルをステージング
git add Hello.py

# 再度変更を確認(コメント:Changes to be committed)
git status

# 変更をコミット
git commit -m "Add Hello.py"

# コミット履歴を確認(HEAD(作業場所) -> master(ローカルブランチ コミット))
git log

# 変更をGitHubにプッシュ
git push

# コミット履歴を確認(HEAD -> master, origin/master(GitHubの最新コミット), origin/HEAD(GitHubのデフォルトブランチの位置)))
git log

2.2.ブランチの作成

2.2.1.新しいブランチの作成・切替え

# 新しいブランチ(feature-branch)を作成する
git branch feature-branch

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

# ブランチを切り替える
git switch feature-branch

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

2.2.2.ブランチで作業

# README.md ファイルの内容を変更
echo "" >> README.md
echo "## ブランチでの作業" >> README.md
echo "これは feature-branch で追加したセクションです。" >> README.md

# ステータスの確認(On branch部分が「feature-branch」となり、コメント:Changes not staged for commit)
git status

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

# ステータスの確認(On branch部分が「feature-branch」で、コメント:Changes to be committed)
git status

# 変更をコミット(-m でコミットメッセージ)
git commit -m "Add branch section to README.md"

# コミット履歴確認((HEAD -> feature-branch)と表示され、(origin/master, origin/HEAD, master)が masterよりも1つコミットが進んでいる状態)
git log

##### 以下 git logのレスポンス例
commit XXX (HEAD -> feature-branch)
Author: tetutetu214
Date: Sat Apr 19 22:22:50 2025 +0000
    Add branch section to README.md

commit YYY(origin/master, origin/HEAD, master)
Author: tetutetu214 
Date:   Sat Apr 19 21:53:01 2025 +0000
    Add Hello.py
##### ここまで レスポンス

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

2.2.3.GitHubでの反映確認

  • 上段赤枠部分の「ブランチ」を「master」から「feature-branch」に切替える
  • 下段赤枠部分の「README.md」に新しいコメントが追加されていることが確認できる
    file

2.3.プルリクエストの操作(プルリクエスト)

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

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

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

2.3.2.ブランチの比較

  • 上段赤枠の「base」に「master」で、「compare」に変更ブランチ(feature-branch)を選択
  • 中段橙枠部分に「プルリクエスト」の内容(※自身で記載)
  • 下段青枠部分に変更内容が表示
    file

2.3.3.プルリクエスト実施

  • 中段橙枠部分にプルリクエストを記載し、右下赤枠部分の「Create pull request」を押下
    file

2.3.4.変更のマージ

今回は自分で作成したプルリクエストを自分でマージする

  • プルリクエストの画面より「Merge pull request」をクリック(※ レビューで問題がない場合)し、次に表示される確認ダイアログ(以下図の、右側部分)も「Confirm merge」を押下
    file

  • マージが完了すると、不要になった「feature-branch」を削除するボタンが表示される。本ハンズオンでは「Delete branch」を押下して削除する
    file
    ※削除されるのはGitHubのリモートブランチのため、現時点ではローカルブランチは残置されている状態

2.3.5.変更後の確認

  • Branchの数が「master」だけの1つとなり、内容がマージされていることが確認できる
    file

2.4.ローカルリポジトリの更新 (pull)

GitHub上でmasterブランチが更新されたので、ローカルも最新の状態に同期させる必要があります。

# master ブランチに切り替え
git switch master

# ブランチが切り替わったことを確認
git branch
  feature-branch
* master

# リモート (origin) の master ブランチの最新の変更をローカルの master ブランチに取り込む
git pull origin master

# コミット履歴を確認
git log

##### 以下 git logのレスポンス例
commit XXX (HEAD -> master, origin/master, origin/HEAD)
Merge: 1f7c803 5189fd0
Author: tetutetu214 
Date:   Sun Apr 20 08:23:52 2025 +0900

#「プルリクエスト#1をマージしました」の意味
    Merge pull request #1 from tetutetu214/feature-branch

READMEにブランチ作業に関するセクションを追加
##### ここまで レスポンス

# ローカル「feature-branch」の削除
git branch -d feature-branch

# ブランチの状態
git branch
* master

3.おわりに

3.1.得られた知見

  • GitHubを使ったブランチ・プルリクの基本的な流れを理解する

3.2.今後の課題

  • フォークとクローンを使って他のプロジェクトに貢献する方法を習得する
Last modified: 2025-04-20

Author