git branch の動作仕様と、主要なオプションまとめ

最終更新:2018-04-14 by Joe

Git でブランチを操作する git branch コマンド。必ずしも出番の多いコマンドではないのですが、しっかりと仕様を把握して、うまく使いこなしましょう。

git branch の機能

git branch は、新しいブランチの作成と、既存のブランチを閲覧や変更操作のためのコマンドです。また、オプションを駆使することで、様々な機能を付加できます。今回、作成・閲覧・変更操作という観点にわけて、種々のオプションの仕様と使い方をまとめていきます。

git branch の使い方

1新規ブランチの作成

新規ブランチを作成する

最も基本的なコマンドです。第二パラメータは任意ですが、起点となるコミットを指定することができます。コミット識別子(SHA-1)を指定してもよいですし、既存のブランチ名でも構いません。

// 新規ブランチを作成する
git branch <branch>

// 起点を指定して、ブランチ作成
git branch <branch> <commit>

もし起点となるコミットに、リモート追跡ブランチの名前(例:origin/master)を指定した場合、自動的に対応するリモートを上流ブランチとして設定してくれます。

「リモート追跡ブランチ」の定義に関しては、こちらに詳しくまとめていますので、理解が曖昧な方はぜひどうぞ:

新規ブランチを作成し、上流ブランチを設定

ブランチ作成時に、明示的に上流ブランチを設定します。すでに作成してしまったローカルブランチに上流ブランチを設定する時は「-u, --set-upstream-to=<ブランチ名>」オプションを使います(後述)。

// 新規ブランチを作成し、上流ブランチを設定
git branch <branch> -t <remote_branch>
git branch <branch> --track <remote_branch>

Git 運用のほとんどのケースでは、ローカルブランチと同名のリモートブランチを上流として設定する事になりますので、この「-t」オプションであえてリモートブランチ名を明示するよりは、

ブランチを作成し、そのままチェックアウト

git branch ではなく、git checkout のコマンドですが、関連が深いのでご紹介です。

git checkout は「-b」オプションにより、コマンド実行時にブランチを新規作成して、そのままブランチをチェックアウトすることができるのです。実際の Git 利用における新規ブランチの作成は下記のコマンドを通して行う事の方がが多いかもしれません。

// 新規ブランチを作成してチェックアウト
git checkout -b 

// 起点を指定して、ブランチ作成してチェックアウト
git checkout -b <branch> <commit>

git checkout でも、指定したブランチ名と同名のリモート追跡ブランチが存在したり、起点としてリモート追跡ブランチ名を指定したりすれば、自動的に上流ブランチが設定されます。git checkout コマンド関しては、こちらもご一読下さい。

2ブランチの閲覧

ブランチ作成や設定周りは、いろいろGit の親切設計により、引数の拡大解釈などや自動の動作が多いですのでやや混乱しやすいですが、おおよそは推測通りに動作してくれると思います。

必ずしもコマンド仕様を正確に把握しなくても、下記のような確認のコマンドで、設定状況を確認する方法を知っていくとよいでしょう。

既存ブランチを閲覧する

既存のローカルブランチをリストし、確認します。

// ローカルブランチの閲覧
git branch 

先頭コミットと上流ブランチを表示する(-vv オプション)

既存のブランチの閲覧に「-vv」オプションを付けると、より多くの情報を表示する事ができます。上流ブランチの設定状況を確認するときに便利です。

// ローカルブランチの閲覧
git branch -vv

// 結果
master 7a8db78 [origin/master] Fix news on the front page .
dev    9dk329d [origin/dev]    Add the feature to re-edit a post.

リモート追跡ブランチを閲覧する(-r, --remotes オプション)

git branch はオプションなしでは、ローカルブランチのみを表示し、リモート追跡ブランチを表示されません。これは、git branch コマンドが、デフォルトで「.git/refs/heads」ディレクトリだけを対象にするからです。リモート追跡ブランチの情報は「.git/refs/remotes」ディレクトリに格納されていますので、「-r, --remotes」オプションにより、これを対象に含めることができます。

// リモート追跡ブランチを閲覧する
git branch -r
git branch --remotes

ブランチ名を検索する(--list オプション)

表示するブランチをパターンマッチングにより、フィルターすることができます。「--list」オプションのあとに、クオーテーションで囲んだパターンを記述します。「-l」は別のオプション「--create-reflog」と同義となりますので、注意して下さい。

// 'feature/'で始まるブランチを表示する。
git branch --list 'feature/*'

3ブランチの変更操作

ブランチ名を変更する(-m, --move オプション)

「-m」オプションにより、ブランチ名を変更することができます。すでに指定した名前と同じブランチが存在すればエラーとなりますが、「-M」と大文字にしたり、「-f」オプションと同時に利用すれば、、強制的にそのブランチ名を利用することができます。

// ブランチ名を変更する
git branch -m <branch_name> <new_banch_name>
git branch --move <branch_name> <new_banch_name>

// ブランチ名を変更する(強制)
git branch -M <branch_name> <new_banch_name> 
git branch -mf <branch_name> <new_banch_name> 
git branch --move --force <branch_name> <new_banch_name> 

4ブランチの削除

Git におけるブランチの削除です。ローカルブランチ、リモート追跡ブランチ、リモートブランチの削除は、うまくコマンドを使い分ける必要があります。ブランチ削除については、こちらにもより詳しくまとめています:

ローカルブランチを削除する(-d, --delete オプション)

最も一般的な、ローカルレポジトリのブランチの削除です。

削除によって履歴が辿れなくなってしまうようなブランチ(未マージのブランチ、すなわち、まだHEADにマージされていないブランチや、上流ブランチにマージされていないブランチ)を削除しようとすると、エラーで怒られます。そんなときは、「-D」オプションを利用し、強制します。

// ローカルブランチを削除する
git branch -d <branch>
git branch --delete<branch>

// マージされていないローカルブランチを削除
bit branch -D <branch>
git branch -df <branch>
git branch --delete --force <branch>

リモート追跡ブランチを削除する(-r, --remotes オプション)

上述の通り、git branch はデフォルトで refs/heads/ の中、すなわちローカルブランチしか参照しません。-r オプションにより、これを refs/remotes/ ディレクトリを含めるように拡張できます。

// リモートトラッキングブランチを削除する
git branch -dr <remote tracking branch>

// 上記の分解したやつ
git branch -d -r <remote tracking branch>
git branch --delete -remotes <remote tracking branch>
git push によるリモートブランチの削除

git branch はローカル環境を操作するコマンドですので、リモートレポジトリ上のブランチを削除することはできません。リモートブランチの削除には、git push コマンドを用います。

// リモートブランチを削除する
git push --delete <remote branch name>

// リモートブランチを削除する(同義)
git push origin :<remote branch name>

2つめの意味がややわかりにくいですが、git push コマンドには <ローカルのブランチ名>:<リモートのブランチ名>という「: (コロン)」で区切るオプションが与えられる事になっています。

上記の削除コマンドでは、<空文字>:<リモートブランチ名>という表現で「何もない」をプッシュすることで、「削除する」コマンドという解釈になります。

こちらにも詳しくまとめています。

その他の git branch のオプション

ブランチ作成し、上流ブランチを設定する「-t, --track」

新規ブランチの作成と同時に、上流ブランチを設定します。オプション --track の名前が混乱しやすいのですが、あくまで「上流ブランチ(Upstream branch )」を設定するコマンドです。--set-upstream-to オプションに関してもご一読下さい。

// 新規ブランチを作成し、そのブランチの上流ブランチを設定する
git branch <branch_name> --t <branch_name_to_track>
git branch <branch_name> --track <branch_name_to_track>

上流ブランチは「origin/xxxx」などとスラッシュをつかってレポジトリ名を明示しますが、ブランチ名だけを指定しても、デフォルトで「refs/remotes/origin/xxxxx」だと拡大解釈されます。

「上流ブランチとは?」の定義については、こちらに詳しくまとめたので、ぜひご一読下さい:

既存ブランチの上流ブランチを設定する「-u <branch>, --set-upstream-to=<branch>」

--track オプションと似ていますが、こちらは既存のブランチに上流を設定するコマンドです。

// 新規ブランチを作成し、そのブランチの上流ブランチを設定する
git branch <branch_name> -u <retemo_branch_to_track>
git branch <branch_name> --set-upstream-to=<remote_branch_name_to_track>

参考情報

今回何度もでてきましたが、「上流ブランチ」に関して、しっかりと意味を理解しておくと、スッキリします。

以下、関連コマンドのGit ドキュメントです。