git branch コマンドは、Gitでブランチの「作成」「一覧表示」「削除」「名前変更(リネーム)」など、ブランチ全般を管理するための非常に重要なコマンドです。
ブランチを活用することで、本番環境のコードに影響を与えることなく、安全に機能追加やバグ修正を並行して進めることができます。
注意点として、git branch コマンド単体ではブランチの切り替え(移動)はできません。切り替えには git switch または git checkout を使用します。
本記事では、git branch の基本的な使い方から、実務でよく使うオプション、リモートブランチの操作、さらには「間違えて削除してしまったブランチの復元方法」などの応用テクニックまで徹底的に解説します。
【早見表】git branch の主要コマンド一覧
日常的に頻出する git branch の主要な使い方と、関連する切り替えコマンドの早見表です。
| 実行したい操作 | 実行するコマンド | 備考 |
|---|---|---|
| ローカルブランチを一覧表示 | git branch | 現在のブランチに * が付く |
| リモート含む全ブランチを一覧表示 | git branch -a | リモートブランチは赤字などで表示される |
| 新しいブランチを作成 | git branch <ブランチ名> | 作成のみで、切り替えは行わない |
| 【推奨】ブランチを作成して切り替え | git switch -c <ブランチ名> | git checkout -b でも同様に動作 |
| ブランチを切り替える(移動) | git switch <ブランチ名> | git checkout でも同様に動作 |
| マージ済みのブランチを安全に削除 | git branch -d <ブランチ名> | 未マージの場合はエラーになる |
| 未マージのブランチを強制削除 | git branch -D <ブランチ名> | 不要になった作業ブランチの破棄に便利 |
| 現在のブランチ名を変更 | git branch -m <新ブランチ名> | 今いるブランチの名前を変更する |
| リモートブランチを削除 | git push origin --delete <ブランチ名> | リモートリポジトリ上のブランチを削除 |
1. ブランチの一覧を表示する(git branch)
リポジトリに存在するブランチを一覧表示します。表示範囲や詳細度を切り替える各種オプションが用意されています。
ローカルブランチのみを表示する
git branch
オプションをつけずに実行すると、ローカルリポジトリにあるブランチの一覧が表示されます。現在チェックアウト(選択)しているブランチの頭には * (アスタリスク)が表示されます。
出力例:
develop
feature/login
* main
リモートブランチを含めてすべて表示する(-a)
git branch -a
-a(all)オプションを使用すると、ローカルブランチだけでなく、GitHubなどのリモートリポジトリから取得したリモート追跡ブランチ(remotes/origin/...)も一緒に表示されます。
出力例:
develop
feature/login
* main
remotes/origin/HEAD -> origin/main
remotes/origin/develop
remotes/origin/feature/login
remotes/origin/main
リモートブランチのみを表示する(-r)
git branch -r
-r(remote)オプションを使用すると、ローカルブランチを除いた、リモート追跡ブランチのみが表示されます。
コミット情報や追跡ブランチを表示する(-v / -vv)
git branch -v
# またはさらに詳細な
git branch -vv
-v オプションを付けると、各ブランチの最新のコミットIDとコミットメッセージが合わせて表示されます。-vv のように v を2つ重ねると、そのローカルブランチがどのリモートブランチ(上流ブランチ)を追跡しているかも確認できます。
出力例(-vv の場合):
develop a1b2c3d [origin/develop] Update README.md
feature/login e5f6g7h [origin/feature/login: ahead 1] Add login validation
* main 9z8y7x6 [origin/main] Fix critical bug
マージ済み / 未マージのブランチを絞り込んで表示する
ブランチ整理の際に役立つ絞り込み機能です。
- 現在のブランチにマージ済みのブランチを表示する:
git branch --merged - 現在のブランチにまだマージされていないブランチを表示する:
git branch --no-merged
git branch --merged で表示されたブランチはマージが終わっているため、安全に削除することができます。
2. ブランチを新規作成する(git branch <ブランチ名>)
新しいブランチを作成して、現在の開発ラインから分岐させます。
現在のブランチから新規作成する
git branch feature/new-page
現在チェックアウトしているブランチの最新コミットを起点にして、feature/new-page というブランチを作成します。
繰り返しになりますが、このコマンドを実行しただけでは、作成されたブランチへの切り替え(移動)は行われません。移動するには以下のコマンドを実行します。
git switch feature/new-page
【推奨】作成と切り替えを同時に行う
「ブランチ作成と切り替えを別々に行うのが面倒」という場合は、git switch または git checkout のオプションを使用するのが実務で最も一般的です。
# git switch を使う場合(推奨)
git switch -c feature/new-page
# git checkout を使う場合(古い方法ですが広く使われています)
git checkout -b feature/new-page
特定のコミットや他のブランチから新規作成する
カレントブランチ以外から分岐させたい場合は、ブランチ名の後ろに起点(ベースコミット)を指定します。
# 特定のコミットIDからブランチを作成する
git branch hotfix-bug a1b2c3d
# 他のローカルブランチ(例: develop)からブランチを作成する
git branch feature/api develop
# タグ(例: v1.0.0)からブランチを作成する
git branch release-1.0 v1.0.0
3. ブランチを削除する(-d / -D)
開発が完了した、または不要になったブランチを削除してリポジトリをクリーンに保ちます。
マージ済みのブランチを安全に削除する(-d)
git branch -d feature/login
-d(–delete)オプションは、指定したブランチがメインブランチ(mainやdevelopなど)にマージ済みの場合にのみ削除を許可します。もし未マージの変更が含まれている場合は以下のような警告エラーが表示され、誤削除を防いでくれます。
error: The branch 'feature/login' is not fully merged.
If you are sure you want to delete it, run 'git branch -D feature/login'.
未マージのブランチを強制削除する(-D)
git branch -D feature/abandoned
-D(大文字のD、または --delete --force)を使用すると、マージ状況に関わらずブランチを強制削除します。途中で作成をやめた機能ブランチや、実験用のブランチを丸ごと破棄したい場合に使用します。
注意:現在チェックアウトしているブランチは削除できない
自分が今「立っている」ブランチを削除しようとすると、以下のエラーが発生します。
error: Cannot delete branch 'feature/login' checked out at '/path/to/repo'
この場合は、まず別のブランチ(mainなど)に切り替えてから削除を実行します。
# 1. 別のブランチに切り替える
git switch main
# 2. 対象のブランチを削除する
git branch -d feature/login
リモートリポジトリ上のブランチを削除する
ローカルブランチを削除しても、すでにGitHub等にプッシュしてあるリモートブランチは自動的に消えません。リモート側のブランチも消したい場合は git push コマンドを使います。
git push origin --delete feature/login
4. ブランチ名を変更する(-m)
ブランチのスペルミスを修正したい場合や、命名ルールに従って名前を変更したい場合に使用します。
現在のブランチ名を変更する
# 名前を変更したいブランチに切り替えておく
git switch feature/misspelled-name
# 新しいブランチ名を指定して実行
git branch -m feature/correct-name
他のブランチ名を変更する
# git branch -m <古いブランチ名> <新しいブランチ名>
git branch -m feature/old-name feature/new-name
すでにプッシュしたリモートブランチの名前を変更する手順
すでにリモートにプッシュされているブランチ名を変更したい場合は、単にローカルを変更するだけでは同期されません。以下の手順でリモートを更新します。
- ローカルでブランチ名を変更する:
git branch -m feature/old-name feature/new-name - 古い名前のリモートブランチを削除する:
git push origin --delete feature/old-name - 新しい名前のブランチをプッシュし、上流ブランチを設定する:
git push -u origin feature/new-name
5. 応用・トラブルシューティング
間違えて削除したローカルブランチを復元する
「マージ前のブランチを -D で誤って強制削除してしまった!」という場合でも、コミットした履歴があれば復元できる可能性があります。Gitの操作履歴を記録している git reflog を使用します。
- Gitの操作ログを確認する:
git reflog
出力から、削除したブランチの「削除直前のコミット(例えば HEAD@{3} やコミットハッシュ a1b2c3d)」を見つけます。
9z8y7x6 HEAD@{0}: checkout: moving from feature/bugfix to main
a1b2c3d HEAD@{1}: commit: Add new feature work <-- これが削除前の最新コミット
- そのコミットから新しくブランチを作成する:
git branch feature/bugfix a1b2c3d
これで、削除したブランチが削除直前のコミット状態で再作成(復元)されます。
6. ブランチ命名規則のベストプラクティス
複数人の開発では、ブランチ名に共通のプレフィックス(接頭辞)を使用すると、役割が分かりやすく、ツール上でも整理しやすくなります。よく使われる一般的なプレフィックスは以下の通りです。
| プレフィックス | 主な目的 | 具体例 |
|---|---|---|
feature/ | 機能追加・変更の開発作業 | feature/login-form |
bugfix/ | バグ・不具合の修正作業 | bugfix/ie11-flexbox |
hotfix/ | 本番環境での緊急の不具合修正(mainから直接分岐) | hotfix/payment-error |
release/ | 本番リリースへの準備用(バージョン番号など) | release/v2.1.0 |
また、複数人での競合を防ぐため、feature/user-name/login-form のようにチームメンバーの名前や、課題管理ツールのチケットID(例: feature/MUC-3965/git-branch)をブランチ名に含める運用も一般的です。
まとめ
git branch は、Gitで開発を進める上でほぼ毎回触る基本コマンドです。
- 現在の状態を見るなら
git branch - 新しい作業を始めるなら
git switch -c <ブランチ名> - 作業が終わったら
git branch -d <ブランチ名>で整理
この基本パターンを身につけ、ブランチを適切に使いこなしましょう!
参考
- Git公式ドキュメント: https://git-scm.com/docs/git-branch

コメント