
本記事の目的
本記事は、バージョン管理システムGitと、コラボレーションプラットフォームGitHubを、体系的に学び、実践的に使いこなすためのガイドです。
あなたがGitユーザーとして、チームの生産性とコードの品質を牽引できる、信頼される開発者へと成長することができる情報を提供します。
実際の開発では「新しい機能を試したい」「急なバグ修正をしなければならない」といった複数の作業を同時に進める場面が頻繁にあります。
この章で学ぶ「ブランチ」は、そうした並行作業を安全かつ効率的に行うための、Gitにおける重要な機能です。
メインの履歴から分岐(ブランチ)させることで、他の作業に影響を与えることなく、独立した環境で自由に作業を進めることができます。
目次
対象読者
本書は、以下のような幅広い読者を対象としています。
- GitやGitHubをこれから学びたい、あるいは学び始めたばかりの学生や初学者の方
- 黒い画面(ターミナル)に抵抗がある方でも、一つひとつのコマンドの意味と目的を理解しながら、着実にステップアップできます。
- 自己流でGitを使ってきたが、チーム開発の経験は浅いエンジニアの方
- Pull Requestの作成、コードレビュー、コンフリクトの解決といった、共同作業で必須となる作法を体系的に学び直したい方に最適です。
- GitHubの便利な機能を使いこなし、開発プロセスを改善したい中級者の方
- GitHub ActionsによるCI/CDの構築、セキュリティ機能の導入、CODEOWNERSによる責任範囲の明確化など、チームの生産性と安全性を向上させるための具体的な手法を学べます。
- エンジニアと協業する非エンジニア職(デザイナー、プロジェクトマネージャー、テクニカルライター等)の方
- 開発チームがどのようなツールとプロセスで仕事を進めているのかを理解し、より円滑なコミュニケーションとコラボレーションを実現するための知識を得られます。
操作の概要
ブランチを使った、開発の流れは以下のようになります。

- 基準となるブランチ(例:
main
)から、作業用の新しいブランチを作成する。
例:「ログイン機能開発ブランチ」「バグ修正ブランチ」など。 - 作成したブランチに切り替えて、作業(コミット)を進める。
この間、main
ブランチには一切影響がありません。 - 作業が完了したら、その成果を
main
ブランチに統合(マージ)する。
これにより、main
ブランチが新機能や修正が取り込まれます。 - 役目を終えた作業用ブランチは削除する。
このサイクルを繰り返すことで、メインのブランチを常に安定した状態に保ちながら、複数の開発を安全に進めることができます。
コマンドごとの利用事例と実行手順
1. git branch <name>
/ git switch -c <name>
:ブランチを作成する
概要
現在のコミット位置から、新しい作業履歴の分岐点(ブランチ)を作成します。
特にgit switch -c <name>
は、ブランチの作成と、そのブランチへの切り替えを一度にやってくれる便利なコマンドです。
コマンド
利用事例
- 新しい機能「
feature/user-profile
」の開発に着手する。 - 緊急のバグ「
hotfix/login-bug
」を修正する必要がある。

実行手順
main
ブランチにいることを確認してから、新しいブランチを作成・移動します。
# (推奨) 'feature/add-login' という名前のブランチを作成し、そこへ移動する
git switch -c feature/add-login
# 従来の方法:ブランチ作成と移動を別々に行う
# 'feature/add-login' ブランチを作成
git branch feature/add-login
# 作成したブランチへ移動
git switch feature/add-login
実行例
コマンドの実行例:ブランチの作成と移動
hogehoge@mac hello-world % git switch -c feature/add-login
Switched to a new branch 'feature/add-login'
これで、あなたはfeature/add-login
という新しい作業部屋に入ることができるようになりました。ここでのコミットはmain
ブランチには影響しませんので、安心して作業してください。
2. git switch <name>
:ブランチを切り替える
概要
現在作業しているブランチから、別の既存ブランチへ移動します。作業部屋を移動するイメージです。
コマンド
利用事例
feature/add-login
での作業を一旦中断し、main
ブランチの最新の状態を確認したい。

実行手順
# mainブランチへ移動する
git switch main
# 再び作業ブランチへ戻る
git switch feature/add-login
実行例
コマンドの実行例:ブランチの作成と移動
hogehoge@mac hello-world % git switch main
M README.md
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
hogehoge@mac hello-world % git switch feature/add-login
M README.md
Switched to branch 'feature/add-login'
hogehoge@mac hello-world %
注意点
コミットしていない変更が残っている状態では、ブランチを切り替えられないことがあります。その場合は、git stash
を使うか、変更をコミットしてから切り替えましょう。
3. git merge <branch>
:ブランチを統合する
概要
あるブランチで行った変更の歴史を、現在いるブランチにすべて取り込み、一つにまとめます。
コマンド
利用事例
feature/add-login
ブランチでの開発が完了したので、その成果をmain
ブランチに反映させたい。

実行手順
- まず、取り込み先となるブランチ(
main
)に移動します。
git switch main
- 次に、取り込みたいブランチ(
feature/add-login
)を指定してgit merge
を実行します。
git merge feature/add-login
- これで
feature/add-login
で行われたすべてのコミットがmain
ブランチに統合されました。 - 最後に、不要になった作業ブランチを削除します。
git branch -d feature/add-login
実行例
コマンドの実行例:ローカルブランチでの変更とマージ
# mainブランチ初期状態
hogehoge@mac hello-world % ls -la
total 16
drwxr-xr-x 5 hogehoge staff 160 Sep 8 00:49 .
drwxr-xr-x 4 hogehoge staff 128 Sep 6 18:12 ..
drwxr-xr-x 13 hogehoge staff 416 Sep 8 00:50 .git
-rw-r--r-- 1 hogehoge staff 70 Sep 8 00:49 README.md
hogehoge@mac hello-world % ls
README.md index.html
# feature/add-loginブランチへの切り替え
hogehoge@mac hello-world % git switch feature/add-login
Switched to branch 'feature/add-login'
# ファイルの編集
hogehoge@mac hello-world % git status
On branch feature/add-login
nothing to commit, working tree clean
hogehoge@mac hello-world % vi README.md
# ステータス確認
hogehoge@mac hello-world % git status
On branch feature/add-login
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md
no changes added to commit (use "git add" and/or "git commit -a")
# 差分確認
hogehoge@mac hello-world % git diff
**diff --git a/README.md b/README.md**
**index c54944b..7495d7f 100644**
**--- a/README.md**
**+++ b/README.md**
@@ -1 +1,2 @@
# My First GitHub Repository
+add second line
# 変更のステージング
hogehoge@mac hello-world % git add README.md
hogehoge@mac hello-world % git diff
hogehoge@mac hello-world % git diff --staged
**diff --git a/README.md b/README.md**
**index c54944b..7495d7f 100644**
**--- a/README.md**
**+++ b/README.md**
@@ -1 +1,2 @@
# My First GitHub Repository
+add second line
hogehoge@mac hello-world % git commit -m "docs: update README.md"
[feature/add-login 0a344a3] docs: update README.md
1 file changed, 1 insertion(+)
hogehoge@mac hello-world % git diff --staged
# mainブランチへの切り替え
hogehoge@mac hello-world % git switch main
Switched to branch 'main'
Your branch is behind 'origin/main' by 1 commit, and can be fast-forwarded.
(use "git pull" to update your local branch)
# mainブランチへfeature/add-loginブランチをマージ
hogehoge@mac hello-world % git merge feature/add-login
Updating 462a977..0a344a3
Fast-forward
README.md | 4 +---
1 files changed, 1 insertion(+), 3 deletions(-)
hogehoge@mac hello-world % ls -la
total 8
drwxr-xr-x 4 hogehoge staff 128 Sep 8 00:57 .
drwxr-xr-x 4 hogehoge staff 128 Sep 6 18:12 ..
drwxr-xr-x 14 hogehoge staff 448 Sep 8 00:57 .git
-rw-r--r-- 1 hogehoge staff 45 Sep 8 00:57 README.md
# mainブランチに変更がないことを確認
hogehoge@mac hello-world % git diff
hogehoge@mac hello-world % git diff --staged
# マージされていることをgitログで確認
hogehoge@mac hello-world % git log --oneline
0a344a3 (**HEAD** -> **main**, **feature/add-login**) docs: update README.md
19f8f2f (**origin/main**, **origin/HEAD**) Revert "feat: Add initial index file and Update README file"
462a977 feat: Add initial index file and Update README file
97aea68 Initial commit
# feature/add-loginブランチの削除
hogehoge@mac hello-world % git branch -d feature/add-login
Deleted branch feature/add-login (was 0a344a3).
hogehoge@mac hello-world %
4. git merge
:マージコンフリクト(競合)の解決
概要
マージしようとした複数のブランチで、同じファイルの同じ行が別々に変更されていた場合、Gitはどちらの変更を優先すべきか判断できず、コンフリクト(競合)を報告してマージを中断します。これを解決するのは、開発者の役割です。
コマンド
利用事例
マージしようとした複数のブランチで、同じファイルの同じ行が別々に変更されていたので、コンフリクトを解消してマージしたい。

実行手順
git merge
を実行すると、コンフリクトが発生した旨のメッセージが表示されます。git status
を実行すると、どのファイルでコンフリクトが発生しているか確認できます。- 該当ファイルをテキストエディタで開くと、以下のような特殊なマーカーで競合箇所が示されています。
<<<<<<< HEAD
ここに現在のブランチ(main)での変更内容が表示されます。
=======
ここにマージしようとしたブランチ(feature/add-login)での変更内容が表示されます。
>>>>>>> feature/add-login
- 開発者はこのマーカーとコードを見比べ、最終的にどちらのコードを残すか(あるいは両方を組み合わせるか)を判断し、手動でファイルを編集します。マーカー(
<<<<<<<
,=======
,>>>>>>>
)も忘れずに削除してください。 - 修正が完了したら、ファイルを保存し、
git add
で解決したことをGitに伝えます。
git add conflicted-file.txt
- 最後に、
git commit
を実行してマージを完了させます。(コミットメッセージは自動で用意されています)
実行例
コマンドの実行例:マージでのコンフリクト
hogehoge@mac hello-world % git merge feature/add-login
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
hogehoge@mac hello-world %
コマンドの実行例:コンフリクトしたファイル(README.md)の確認
<<<<<<< HEAD
# My First Git?Hub Repository
=======
# My First Git/Hub Repository
>>>>>>> feature/add-login
add second line
コマンドの実行例:コンフリクトしたファイル(README.md)を編集し内容を確定
# My First Git/Hub Repository
add second line
コマンドの実行例:編集したファイルをコミット
hogehoge@mac hello-world % git add README.md
hogehoge@mac hello-world % git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
All conflicts fixed but you are still merging.
(use "git commit" to conclude merge)
Changes to be committed:
modified: README.md
hogehoge@mac hello-world % git commit -m "fix:conflict"
[main 6e4ce3b] fix:conflict
5. git rebase <branch>
:履歴を一直線に整える
概要
merge
が「合流」のイメージなら、rebase
は「付け替え」のイメージです。作業ブランチの根元を、指定したブランチの最新地点に移動させ、コミット履歴を一直線に綺麗に見せることができます。
mergeの場合(合流)

rebaseの場合(付け替え)
rebase
を実行すると、コミット履歴が一直線になるように付け替えられます。
実行前:

実行後:

コマンド
利用事例
main
ブランチの履歴が汚れないように、作業ブランチの履歴を綺麗に整えてからマージしたい。
注意点
GitHubなどで既に他の人と共有しているブランチに対してrebase
を実行してはいけません。 履歴を書き換える強力な操作のため、他の人の履歴と食い違い(コンフリクト)を生み出す原因となります。個人の作業ブランチでのみ利用するのが原則です。
6. git cherry-pick <sha>
:特定のコミットだけを適用する
概要
他のブランチにある、特定のコミット1つだけを「つまみ食い」して、現在のブランチにコピーするコマンドです。コミットを識別するためのID(SHA、git log
で確認できる長い英数字)を指定します。
コマンド
利用事例
- ある開発ブランチで行ったバグ修正コミットが、緊急で
main
ブランチにも必要になった。
cherry-pick
を実行すると、以下のようにfeature
ブランチにある「バグ修正」のコミットがコピーされ、main
ブランチの先頭に適用されます。

実行手順
- まず、取り込みたいコミットのID(SHA)を、
feature
ブランチのログで確認します。bash # featureブランチに移動 git switch feature # ログを表示 git log # commit 5a3f8b... Author: ... <- このIDをコピーする
- 次に、適用先となる
main
ブランチに移動します。bash git switch main
git cherry-pick
コマンドで、先ほどコピーしたコミットIDを指定します。bash git cherry-pick 5a3f8b
- これで、
main
ブランチに指定したコミットだけが適用されました。
実行例
コマンドの実行例:feature/cherry-pickブランチから指定したコミットを取得
README.md(feature/cherry-pickブランチ)
# My First GitHub Repository
add second line
add third line
add fourth line
add fifth line
git log –oneline(feature/cherry-pickブランチ)
193b0cd (**HEAD** -> **feature/cherry-pick**) upd:add fifth line
360aefd upd:add 4th line
ac1b2fb upd:add 3rd line
0a344a3 (**origin/main**, **origin/HEAD**, **main**) docs: update README.md
19f8f2f Revert "feat: Add initial index file and Update README file"
462a977 feat: Add initial index file and Update README file
97aea68 Initial commit
hogehoge@mac hello-world %
README.md(mainブランチ)
# My First GitHub Repository
add second line
git cherry-pick(mainブランチ)
hogehoge@mac hello-world % git switch main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
hogehoge@mac hello-world % git cherry-pick ac1b2fb
[main 1e0cd76] upd:add 3rd line
Date: Mon Sep 8 18:27:00 2025 +0900
1 file changed, 1 insertion(+)
README.md(mainブランチ)
# My First GitHub Repository
add second line
add third line
7. git revert <sha>
:コミットを打ち消す
概要
指定したコミットの変更内容を、完全に打ち消す効果を持つ新しいコミットを作成します。履歴を削除するのではなく、上書き修正するので、安全に変更を元に戻すことができます。
コマンド
利用事例
- リリースした機能に問題が見つかったため、その機能を追加したコミットを安全に取り消したい。

実行手順
- まず、打ち消したいコミットのID(SHA)をログで確認します。
bash git log # commit 3c8b2d... Author: ... <- この「問題のある機能B」のIDをコピー
git revert
コマンドで、そのコミットIDを指定します。bash git revert 3c8b2d
- コマンドを実行すると、自動的にコミットメッセージが入力された状態でテキストエディタが開きます。内容を確認し、そのまま保存してエディタを閉じます。
- これで、指定したコミットの変更を打ち消す、新しいコミットが作成されました。履歴は上書きされず、安全に変更が取り消されます。
実行例
コマンドの実行例:feature/cherry-pickブランチから指定したコミットを取り消し
README.md(feature/cherry-pickブランチ)
# My First GitHub Repository
add second line
add third line
add fourth line
add fifth line
git log –oneline(feature/cherry-pickブランチ)
hogehoge@mac hello-world % git log --oneline
193b0cd (**HEAD** -> **feature/cherry-pick**) upd:add fifth line
360aefd upd:add 4th line
ac1b2fb upd:add 3rd line
0a344a3 (**origin/main**, **origin/HEAD**) docs: update README.md
19f8f2f Revert "feat: Add initial index file and Update README file"
462a977 feat: Add initial index file and Update README file
97aea68 Initial commit
hogehoge@mac hello-world %
git revert(feature/cherry-pickブランチ)
hogehoge@mac hello-world % git revert 193b0cd
[feature/cherry-pick b0d07f3] Revert "upd:add fifth line"
1 file changed, 1 deletion(-)
hogehoge@mac hello-world %
git revertコマンドで作成されたコミットメッセージ
Revert "upd:add fifth line"
This reverts commit 193b0cde8e5e9eec4f3974a790145b3ced3a2e6f.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch feature/cherry-pick
# Changes to be committed:
# modified: README.md
#
README.md(feature/cherry-pickブランチ)
# My First GitHub Repository
add second line
add third line
add fourth line
参考資料
- Pro Git Book – Git のブランチ機能
- Git公式ドキュメント
まとめ
ブランチは少し複雑に感じるかもしれませんが、使いこなせれば開発効率が向上します。
まずはswitch -c
、merge
、そしてコンフリクト解決の流れをしっかりマスターしましょう!
さあ、あなたのMacを快適な開発環境にしましょう!!