T-CREATOR

git branch 徹底解説:作成・削除・切り替えまで一気に理解

git branch 徹底解説:作成・削除・切り替えまで一気に理解

Git を使った開発作業において、ブランチ機能は欠かせない存在です。新機能の開発やバグ修正を並行して進めたり、チームメンバーと効率的に協力したりするには、ブランチを適切に扱えることが重要になります。

しかし、「ブランチを作ったはいいけど、どうやって切り替えるの?」「不要になったブランチを安全に削除したい」「コマンドを打ったらエラーが出てしまった」といった悩みを抱える方も多いのではないでしょうか。

本記事では、git branch コマンドの基本的な使い方から実践的なワークフローまでを、初心者の方にもわかりやすく解説いたします。ブランチの作成・切り替え・削除を一通りマスターして、より安心して Git を活用していただければと思います。

背景

Git ブランチの概念

Git におけるブランチとは、開発の履歴を枝分かれさせる仕組みのことです。

メインの開発ライン(通常は mainmaster ブランチ)から分岐させることで、元のコードに影響を与えることなく新しい機能やバグ修正に取り組むことができます。作業が完了したら、変更内容を元のブランチに統合(マージ)するのが一般的な流れですね。

次の図は、Git ブランチの基本的な流れを表しています。

mermaidgitGraph
    commit id: "初期コミット"
    commit id: "機能A追加"
    branch feature-branch
    commit id: "新機能開発中"
    commit id: "テスト追加"
    checkout main
    commit id: "バグ修正"
    checkout feature-branch
    commit id: "機能完成"
    checkout main
    merge feature-branch
    commit id: "リリース準備"

このように、メインブランチから分岐して作業し、最終的に統合するパターンが基本となります。

なぜブランチ機能が重要なのか

ブランチ機能の最大の利点は、作業の独立性を保てることです。

例えば、新機能の開発中に緊急のバグ修正が必要になった場合を考えてみましょう。ブランチを使わずに作業していると、開発途中の不安定なコードが本番環境に混入してしまう危険性があります。

しかし、ブランチを使えば以下のように安全に対応できます。

  • 新機能開発用のブランチで作業を継続
  • バグ修正用の別ブランチを作成して対応
  • それぞれの作業が互いに影響しない
  • 完了した作業から順次メインブランチに統合

このような柔軟な開発スタイルを実現するために、ブランチ機能は必要不可欠なのです。

チーム開発での位置づけ

チーム開発においても、ブランチは重要な役割を果たします。

複数の開発者が同じプロジェクトに取り組む際、それぞれが独自のブランチで作業することで、以下のメリットが得られます。

項目メリット
1作業の衝突を防げる
2コードレビューがしやすくなる
3実験的な変更を安全に試せる
4機能ごとにリリースタイミングを調整できる

特に、プルリクエスト(マージリクエスト)と組み合わせることで、品質の高いコードを維持しながら効率的な開発を進められるでしょう。

課題

ブランチ操作で初心者が困る場面

Git のブランチ操作は便利な反面、初心者の方が戸惑いやすいポイントもいくつか存在します。

特によく聞かれるのが、以下のような悩みです。

現在のブランチがわからなくなる 作業中にどのブランチにいるのかわからなくなり、意図しないブランチで変更を加えてしまうケースがあります。

ブランチ切り替え時のファイル変更 ブランチを切り替えた際に、ファイルの内容が変わってしまって混乱するケースもよくありますね。

マージされていないブランチの扱い 作業完了後、不要になったブランチをどのタイミングで削除すべきかわからない場合もあります。

これらの課題は、Git の仕組みを理解し、適切なコマンドを覚えることで解決できます。

よくあるエラーと混乱ポイント

ブランチ操作で遭遇しやすいエラーパターンを確認しておきましょう。

未コミットの変更がある状態での切り替えエラー

basherror: Your local changes to the following files would be overwritten by checkout:
    src/main.js
Please commit your changes or stash them before you switch branches.
Aborting

このエラーは、現在のブランチで未保存の変更がある状態で別のブランチに切り替えようとした際に発生します。

存在しないブランチへの切り替えエラー

basherror: pathspec 'feature-login' did not match any file(s) known to git

指定したブランチ名が存在しない、または名前を間違えている場合のエラーです。

削除できないブランチのエラー

basherror: Cannot delete branch 'feature-payment' checked out at '/path/to/repo'

現在チェックアウトしているブランチは削除できないため、別のブランチに移動する必要があります。

これらのエラーメッセージを理解することで、適切な対処ができるようになります。

効率的なブランチ管理の難しさ

プロジェクトが大きくなるにつれて、ブランチの数も増加していきます。

効率的なブランチ管理には以下の課題があります。

次の図は、ブランチ管理が複雑化する様子を示しています。

mermaidgitGraph
    commit id: "A"
    commit id: "B"
    branch feature-1
    commit id: "F1-1"
    checkout main
    branch feature-2
    commit id: "F2-1"
    branch hotfix
    commit id: "HF-1"
    checkout feature-1
    commit id: "F1-2"
    checkout feature-2
    commit id: "F2-2"
    checkout main
    merge hotfix
    checkout feature-1
    commit id: "F1-3"
    checkout main
    merge feature-1

このような複雑な状況でも、適切な命名規則や整理方法を身につけることで、管理しやすくなります。

解決策

git branch コマンドの基本構文

git branch コマンドは、ブランチの作成・確認・削除を行う基本的なコマンドです。

まずは、基本的な構文を確認しましょう。

ブランチ一覧の表示

bash# ローカルブランチの一覧表示
git branch

新しいブランチの作成

bash# 新しいブランチを作成(切り替えはしない)
git branch <ブランチ名>

ブランチの削除

bash# マージ済みブランチの削除
git branch -d <ブランチ名>

# 強制削除(未マージでも削除)
git branch -D <ブランチ名>

これらの基本コマンドを組み合わせることで、ほとんどのブランチ操作が可能になります。

安全なブランチ操作の手順

ブランチ操作を安全に行うための推奨手順をご紹介します。

手順1: 現在の状況を確認

作業を始める前に、必ず現在の状態を確認しましょう。

bash# 現在のブランチと変更状況を確認
git status

手順2: 変更内容を適切に保存

未コミットの変更がある場合は、以下のいずれかを選択します。

bash# コミットして保存
git add .
git commit -m "作業途中の変更を保存"

# または、一時的に退避
git stash

手順3: ブランチの作成と切り替え

新しいブランチを作成して、そのブランチに切り替える操作です。

bash# ブランチ作成と切り替えを同時に実行
git checkout -b <新しいブランチ名>

# または、Git 2.23 以降の新しいコマンド
git switch -c <新しいブランチ名>

この手順を守ることで、予期しないトラブルを避けられます。

エラー回避のベストプラクティス

ブランチ操作でのエラーを避けるために、以下のベストプラクティスを心がけましょう。

実践1: ブランチ名の命名規則を決める

チーム開発では、一貫した命名規則が重要です。

パターン用途
1feature​/​login-page新機能開発
2bugfix​/​payment-errorバグ修正
3hotfix​/​security-patch緊急修正
4release​/​v1.2.0リリース準備

実践2: 作業前の確認習慣

bash# 作業開始前のチェックリスト
git status          # 現在の状態確認
git branch          # ブランチ一覧確認
git log --oneline -5 # 最新のコミット履歴確認

実践3: 定期的なブランチ整理

不要になったブランチは定期的に削除して、リポジトリを整理しましょう。

bash# マージ済みブランチの確認
git branch --merged

# リモートブランチとの同期
git remote prune origin

これらの習慣を身につけることで、安全で効率的なブランチ管理ができるようになります。

具体例

ブランチ作成編

新しいログイン機能を開発するシナリオで、ブランチ作成の具体的な手順を見てみましょう。

ステップ1: 作業前の状態確認

まず、現在の状況を把握します。

bash# 現在のブランチを確認
git branch

実行結果の例:

bash* main
  develop

現在は main ブランチにいることがわかります(* が現在のブランチを示しています)。

ステップ2: 最新の状態に更新

新しいブランチを作る前に、ベースとなるブランチを最新の状態にしておきましょう。

bash# リモートから最新の変更を取得
git pull origin main

ステップ3: 新しいブランチの作成

ログイン機能開発用のブランチを作成します。

bash# feature/login-page ブランチを作成
git branch feature/login-page

このコマンドではブランチの作成のみが行われ、切り替えは行われません。

ステップ4: ブランチの切り替え

作成したブランチに切り替えます。

bash# 作成したブランチに切り替え
git checkout feature/login-page

切り替え後の確認:

bashgit branch

実行結果:

bash* feature/login-page
  main
  develop

これで新しいブランチでの作業準備が完了です。

ショートカット: 作成と切り替えを同時実行

上記のステップ3と4は、以下のコマンドで同時に実行できます。

bash# ブランチ作成と切り替えを同時に実行
git checkout -b feature/login-page

# または Git 2.23 以降の推奨コマンド
git switch -c feature/login-page

このワンライナーを使うことで、作業効率が向上します。

ブランチ切り替え編

開発中に緊急のバグ修正が必要になったシナリオで、ブランチ切り替えの手順を確認しましょう。

状況設定 現在 feature​/​login-page ブランチで作業中ですが、本番環境でバグが発見され、緊急修正が必要になりました。

ステップ1: 現在の作業状況確認

bash# 現在の変更状況を確認
git status

実行結果例:

bashOn branch feature/login-page
Changes not staged for commit:
  modified:   src/components/LoginForm.js
  modified:   src/styles/login.css

Untracked files:
  src/components/LoginButton.js

未コミットの変更があることがわかります。

ステップ2: 変更内容の保存

ブランチを切り替える前に、現在の作業内容を保存する必要があります。

方法1: コミットして保存

bash# 全ての変更をステージング
git add .

# 作業途中であることを明記してコミット
git commit -m "WIP: ログインフォームの実装途中"

方法2: stash で一時保存

bash# 変更内容を一時的に退避
git stash push -m "ログイン機能開発の作業途中"

ステップ3: メインブランチへの切り替え

bash# main ブランチに切り替え
git checkout main

# 最新の状態に更新
git pull origin main

ステップ4: バグ修正用ブランチの作成

bash# バグ修正用ブランチを作成・切り替え
git checkout -b hotfix/payment-calculation-error

バグ修正が完了したら、再び元のブランチに戻ります。

ステップ5: 元のブランチに戻る

bash# 元の作業ブランチに切り替え
git checkout feature/login-page

stash を使用した場合は、保存した作業内容を復元します。

bash# stash した内容を復元
git stash pop

これで、中断した作業を継続できます。

ブランチ削除編

機能開発が完了し、メインブランチにマージされたブランチを削除する手順を説明します。

シナリオ feature​/​login-page の開発が完了し、main ブランチにマージされました。不要になったブランチを安全に削除します。

ステップ1: マージ状況の確認

削除前に、ブランチが正しくマージされているか確認します。

bash# マージ済みのブランチ一覧を表示
git branch --merged main

実行結果例:

bash  feature/login-page
* main
  develop

feature​/​login-page がマージ済みブランチの一覧に表示されています。

ステップ2: 削除対象ブランチから移動

削除対象のブランチにいる場合は、別のブランチに移動します。

bash# main ブランチに切り替え
git checkout main

ステップ3: ローカルブランチの削除

マージ済みであることを確認したので、安全に削除できます。

bash# マージ済みブランチの削除
git branch -d feature/login-page

削除成功時のメッセージ:

bashDeleted branch feature/login-page (was 1a2b3c4).

ステップ4: リモートブランチの削除

リモートリポジトリにも同名のブランチが存在する場合は、こちらも削除します。

bash# リモートブランチの削除
git push origin --delete feature/login-page

強制削除が必要な場合

まれに、マージされていないブランチを削除する必要がある場合があります。

bash# 未マージブランチを確認
git branch --no-merged main

# 強制削除(注意:復旧が困難)
git branch -D feature/abandoned-feature

強制削除する前に、本当に不要なブランチかどうか十分に確認してください。

削除後の確認

bash# ブランチ一覧で削除を確認
git branch

# リモートブランチの状況も確認
git branch -r

定期的にこの手順でブランチを整理することで、リポジトリを清潔に保てます。

実践的なワークフロー例

実際の開発プロジェクトで使われるワークフローの例をご紹介します。

Git Flow を参考にしたワークフロー

以下の図は、典型的な開発ワークフローを示しています。

mermaidgitGraph
    commit id: "初期リリース"
    branch develop
    commit id: "開発開始"
    branch feature/user-auth
    commit id: "認証機能開発"
    commit id: "テスト追加"
    checkout develop
    merge feature/user-auth
    branch feature/dashboard
    commit id: "ダッシュボード機能"
    checkout main
    branch hotfix/security-fix
    commit id: "セキュリティ修正"
    checkout main
    merge hotfix/security-fix
    checkout develop
    merge main
    merge feature/dashboard
    checkout main
    merge develop
    commit id: "v1.1.0 リリース"

実践例: 新機能開発の完全サイクル

ユーザープロファイル機能を開発する場合の具体的な手順です。

フェーズ1: 開発準備

bash# 最新の develop ブランチから開始
git checkout develop
git pull origin develop

# 機能開発ブランチを作成
git checkout -b feature/user-profile

フェーズ2: 開発作業

bash# 定期的にコミット
git add src/components/UserProfile.js
git commit -m "ユーザープロファイルコンポーネントの基本構造を追加"

git add src/api/userProfile.js
git commit -m "プロファイル取得・更新APIを実装"

# 必要に応じて develop ブランチの変更を取り込み
git checkout develop
git pull origin develop
git checkout feature/user-profile
git merge develop

フェーズ3: 開発完了とマージ準備

bash# 最終テストとコミット
git add .
git commit -m "ユーザープロファイル機能の実装完了"

# リモートにプッシュしてプルリクエスト作成
git push origin feature/user-profile

フェーズ4: マージ後の整理

bash# マージ完了後、develop ブランチに切り替え
git checkout develop
git pull origin develop

# 作業ブランチを削除
git branch -d feature/user-profile
git push origin --delete feature/user-profile

チーム開発での注意点

項目推奨事項
1毎日の作業開始前に git pull で最新化
2機能完了前でも定期的にリモートにプッシュ
3プルリクエストにはわかりやすい説明を記載
4コードレビュー後の修正は追加コミットで対応

このワークフローを習慣化することで、チーム全体の開発効率が向上します。

図で理解できる要点:

  • メインブランチは常に安定した状態を保つ
  • 機能開発は専用ブランチで独立して行う
  • 緊急修正は hotfix ブランチで迅速に対応
  • 定期的にブランチをマージして統合する

まとめ

本記事では、Git のブランチ機能について、基本的な概念から実践的な活用方法まで詳しく解説いたしました。

重要なポイントの振り返り

ブランチの基本操作として、以下の3つのコマンドをマスターすることが重要です。

  • git branch : ブランチの一覧表示・作成・削除
  • git checkout / git switch : ブランチの切り替え
  • git merge : ブランチの統合

また、安全なブランチ操作のためには、以下の習慣を身につけることが大切でしょう。

  1. 作業前の状況確認(git statusgit branch
  2. 未コミットの変更がある場合の適切な保存
  3. 一貫した命名規則の採用
  4. 定期的なブランチ整理

エラー対処の心構え

ブランチ操作でエラーが発生した場合も、慌てる必要はありません。エラーメッセージをしっかり読んで、以下の基本的な対処法を試してみてください。

  • 未コミットの変更は git stash で一時保存
  • ブランチが存在しない場合は git branch で確認
  • 削除できないブランチは別のブランチに移動してから削除

継続的な学習のために

Git のブランチ機能は奥が深く、今回紹介した内容は基礎的な部分です。より高度なテクニックとして、リベース(git rebase)やチェリーピック(git cherry-pick)なども存在します。

まずは本記事で紹介した基本操作をしっかりと身につけ、実際のプロジェクトで活用してみてください。経験を積むことで、より効率的で安全なブランチ管理ができるようになるはずです。

Git を使った開発がより楽しく、より生産的になることを心から願っています。

関連リンク