書式

git branch [--color[=<when>] | --no-color] [-r | -a]
        [--list] [-v [--abbrev=<length> | --no-abbrev]]
        [--column[=<options>] | --no-column]
        [(--merged | --no-merged | --contains) [<commit>]] [<pattern>…]
git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
git branch --unset-upstream [<branchname>]
git branch (-m | -M) [<oldbranch>] <newbranch>
git branch (-d | -D) [-r] <branchname>…
git branch --edit-description [<branchname>]

解説

--list が指定された場合、またはオプション以外の引数がなかった場合、 存在するブランチがリストされます; カレントブランチはアスタリスクでハイライト されます。 オプション -r はリモート追跡ブランチをリストし、オプション -a はローカルとリモート両方のブランチを表示します。 複数のパターンが 与えられた場合、あるブランチはパターンのうちどれかにマッチすれば表示されます。 <pattern> を与える場合、 --list を使用しなければならないことに注意 してください; でなければ、このコマンドはブランチ作成であると解釈します。

--contains を使用すると、指定されたコミットを含むブランチのみ表示します (言い換えると、ブランチの先端のコミットが、指定されたコミットの子孫である ようなブランチのことです)。 --merged を使用すると、指定されたコミットに マージ済みのブランチ(つまり、ブランチの先端のコミットが指定されたコミット から到達可能であるようなブランチ) のみリストされます。 --no-merged を使用 すると、指定されたコミットにマージされていないブランチのみリストされます。 <commit> 引数がない場合、HEAD がデフォルトになります(つまり、カレントブランチ の先端です)。

コマンドの2番めの形式は現在の HEAD を指し示すような <branchname> という 名前の新しいブランチヘッドを作成します; 新しいブランチに切り替えるには "git checkout <newbranch>" を使用します。

ローカルブランチがリモート追跡ブランチから分岐した場合、 Git は git pull でそのリモート追跡ブランチから適切にマージできるよう、 ブランチを設定します(具体的には branch.<name>.remotebranch.<name>.merge の設定エントリを設定します)。 この挙動はグローバル設定の branch.autosetupmerge フラグで変更することもできます。 この設定は --track および --no-track オプションで上書きでき、 あとから git branch --set-upstream-to で変更できます。

-m または -M オプションを指定すると、 <oldbranch> の名前が <newbranch> に 変更されます。 もし <oldbranch> が対応する reflog を持っている場合、 <newbranch> にマッチするよう、それも名前が変更され、 ブランチの名前の変更を 記録する reflog エントリが作成されます。 もし <newbranch> が存在する場合、 名前の変更を強制するためには -M を指定しなければなりません。 -d または -D オプションを指定すると、 <branchname> が削除されます。 削除するブランチはふたつ以上指定できます。 そのブランチが現在 reflog を 持っている場合、 reflog も削除されます。

リモート追跡ブランチを削除するには -r-d を一緒に指定します。リモート 追跡ブランチの削除は、リモートリポジトリにそれがもう存在しないか、 git fetch がそのブランチを取得しないよう設定されている場合にのみ意味があるということに 注意してください。 使われなくなったリモート追跡ブランチを全て消す方法 については、 git-remote(1)prune サブコマンドも参照してください。

オプション

-d
--delete

ブランチを削除します。 対象のブランチはその上流のブランチに完全に マージされていなければなりません。 --track または --set-upstream によって上流が設定されていない場合、 HEAD にマージされていなければ なりません。

-D

ブランチのマージ状況を考慮せずに削除します。

-l
--create-reflog

ブランチの reflog を作成します。 このオプションは "<branchname>@{yesterday}" のような日付ごとの sha1 表現の使用を 有効化し、ブランチに対する変更の全てを記録するようにします。 ノンベアリポジトリにおいては、 reflog は core.logallrefupdates 設定 オプションにより、デフォルトで常に有効であることに注意してください。

-f
--force

<branchname> がすでに存在していれば、 <branchname> を <startpoint> に リセットします。 -f オプションなしでは、 git branch は既存の ブランチに対する変更を拒否します。

-m
--move

ブランチと対応する reflog を移動/名前変更します。

-M

新しいブランチ名がすでに存在していても、ブランチを移動/名前変更します。

--color[=<when>]

カレントブランチ、ローカルブランチ、リモート追跡ブランチに色を つけてハイライトします。 値は always (デフォルト), never, auto のいずれかでなければなりません。

--no-color

設定ファイルが出力の色付けをデフォルトにしている場合でも、ブランチの 色付けを無効にします。 --color=never と同じです。

--column[=<options>]
--no-column

ブランチのリストをカラム表示にします。 オプションの文法については column.branch の設定値を見てください。 <options> なしの --column および --no-column の指定はそれぞれ alwaysnever を指定した 場合と等価です。

このオプションは冗長モードでない場合にのみ有効です。

-r
--remotes

リモート追跡ブランチをリストまたは (-dを一緒に指定した場合) 削除します。

-a
--all

ローカルブランチとリモート追跡ブランチの両方をリストします。

--list

リストモードで動作させます。 git branch <pattern> はブランチを作成 しようとします。 マッチするブランチをリストするには git branch --list <pattern> を使います。

-v
-vv
--verbose

リストモードの場合、各ブランチヘッドの sha1 とコミットサブジェクト を各行に表示し、上流のブランチとコミット数の差も (あれば) 一緒に 表示します。 2回指定された場合、 上流のブランチ名も表示します (git remote show <remote> も参照してください)。

-q
--quiet

エラー以外のメッセージ出力を抑制して、ブランチの作成と削除を より静かに行います。

--abbrev=<length>

リストされた出力中の sha1 の最小表示長を変更します。デフォルト値は 7 で、 core.abbrev 設定オプションで上書きできます。

--no-abbrev

リストされた出力の sha1 を省略せず、完全な値を表示します。

-t
--track

新しいブランチを作成するとき、その新しいブランチから見た "上流(upstream)" として開始地点のブランチを記録するために、 branch.<name>remotebranch.<name>.merge の設定エントリを 設定します。 この設定は git statusgit branch -v を実行した ときに、これらのブランチ間の関係を表示するよう git に指示します。 加えて、 このブランチがチェックアウトされている状態で git pull を 引数なしで実行したときに、 この上流から pull するように指示します。

この挙動はブランチの開始地点がリモート追跡ブランチだったときのデフォルトです。 git checkoutgit branch が常に --no-track が指定されたように振る舞って 欲しいのであれば、 設定値 branch.autosetupmerge を false に設定します。 開始地点がローカルブランチとリモート追跡ブランチのどちらであってもこの挙動 になって欲しければ、 設定値を always に設定します。

--no-track

設定値 branch.autosetupmerge が true であっても "上流" を設定しません。

--set-upstream

指定されたブランチが存在しないか、 --force が指定されている場合、 --track とまったく同一の動作をします。 それ以外の場合も --track でブランチを作成するのと同様の設定を行いますが、ブランチ開始地点は 変更しません。

-u <upstream>
--set-upstream-to=<upstream>

<upstream> が <branchname> の上流ブランチであると見えるように <branchname> の追跡情報を設定します。 <branchname> が指定されない 場合、 デフォルトでカレントブランチが対象となります。

--unset-upstream

<branchname> の上流に関する情報を削除します。 ブランチが指定されない 場合、 デフォルトでカレントブランチが対象となります。

--edit-description

エディタを開き、ブランチの目的を説明するテキストを編集します。 テキストは他のさまざまなコマンド (例えば request-pull) で使われます。

--contains [<commit>]

指定された <commit> (指定がなければ HEAD) を含むブランチのみリスト します。 --list が暗黙的に指定されます。

--merged [<commit>]

指定された <commit> (指定がなければ HEAD) から到達可能なブランチのみ リストします。 --list が暗黙的に指定されます。

--no-merged [<commit>]

指定された <commit> (指定がなければ HEAD) から到達可能でないブランチ のみリストします。 --list が暗黙的に指定されます。

<branchname>

作成または削除するブランチの名前です。 新しいブランチ名は git-check-ref-format(1) で定義される チェックをすべてパスしなければなりません。これらのチェックで ブランチ名に使える文字が制限されることがあります。

<start-point>

新しいブランチヘッドがこのコミットを指すことになります。 ここには ブランチ名、コミットID, またはタグを指定できます。 もしこれが省略 された場合、代わりに HEAD が使われます。

<oldbranch>

名前変更の対象となる、現在存在しているブランチの名前です。

<newbranch>

存在するブランチのための新しい名前です。 <branchname> と同じ制限が 適用されます。

すでにあるタグから開発を開始
$ git clone git://git.kernel.org/pub/scm/.../linux-2.6 my2.6
$ cd my2.6
$ git branch my2.6.14 v2.6.14   <1>
$ git checkout my2.6.14
  1. このステップと次のステップは "checkout -b my2.6.14 v2.6.14" で1ステップに できます。

不要なブランチを削除
$ git clone git://git.kernel.org/.../git.git my.git
$ cd my.git
$ git branch -d -r origin/todo origin/html origin/man   <1>
$ git branch -D test                                    <2>
  1. リモート追跡ブランチ "todo", "html", "man" を削除します。 次回の fetch または pull で再び作成されます (そうしないよう設定しない限り)。 git-fetch(1) を見てください。

  2. "test" ブランチのすべてのコミットが "master" ブランチ (または現在 チェックアウトされているブランチ) にマージされていない場合でも "test" ブランチを削除します。

注意

すぐにチェックアウトするブランチを作成するのであれば、 -b オプションを 指定して git checkout コマンドを使ったほうが、ブランチの作成とチェックアウト を1ステップで実行できるので簡単です。

--contains, --merged および --no-merged のオプションは3つの関連する、 しかし異なる目的のために使えます。

  • --contains <commit> は <commit> が rebase または amend されるときに 特に注意が必要なブランチ名を探すときに使います。 これらのブランチは <commit> を含んでいる(contain)ためです。

  • --merged は安全に削除できるブランチを探すときに使います。これらの ブランチは HEAD に完全に含まれているためです。

  • --no-merged は HEAD にマージする候補となるブランチを探すときに使います。 これらのブランチは HEAD に完全には含まれていないためです。

あわせて読みたい

GIT

これは git(1) の一部です。