サイトアイコン 協栄情報ブログ

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

0.はじめに

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

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

1.基本的な用語

1.2.1.本ブログでの概念図

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.ハンズオン

前提条件

2.1.GitHubを使う(clone)

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での反映確認

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

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

2.3.2.ブランチの比較

2.3.3.プルリクエスト実施

2.3.4.変更のマージ

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

2.3.5.変更後の確認

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.得られた知見

3.2.今後の課題

モバイルバージョンを終了