SYNOPSIS

git branch [--color[=<when>] | --no-color] [--show-current]
           [-v [--abbrev=<n> | --no-abbrev]]
           [--column[=<options>] | --no-column] [--sort=<key>]
           [--merged [<commit>]] [--no-merged [<commit>]]
           [--contains [<commit>]] [--no-contains [<commit>]]
           [--points-at <object>] [--format=<format>]
           [(-r|--remotes) | (-a|--all)]
           [--list] [<pattern>...]
git branch [--track[=(direct|inherit)] | --no-track] [-f]
           [--recurse-submodules] <branch-name> [<start-point>]
git branch (--set-upstream-to=<upstream>|-u <upstream>) [<branch-name>]
git branch --unset-upstream [<branch-name>]
git branch (-m|-M) [<old-branch>] <new-branch>
git branch (-c|-C) [<old-branch>] <new-branch>
git branch (-d|-D) [-r] <branch-name>...
git branch --edit-description [<branch-name>]

DESCRIPTION

--list が指定されている場合、またはオプション以外の引数がない場合は、既存のブランチが一覧表示されます。 現在のブランチは緑色(green)で強調表示され、アスタリスク(*)でマークされます。 リンクされたワークツリーでチェックアウトされたブランチは、シアン(cyan)で強調表示され、プラス記号(+)でマークされます。 オプション -r を指定すると、リモート追跡ブランチが一覧表示され、オプション -a はローカルブランチとリモートブランチの両方を表示します。

<pattern> が指定されている場合、出力を、マッチするブランチに制限するためのシェルワイルドカードとして使用されます。 複数のパターンが指定されている場合、いずれかのパターンに一致するとブランチが表示されます。

<pattern> を提供するときは、 --list を使用する必要があることに注意してください。 そうしないと、コマンドがブランチの作成として解釈される可能性があります。

--contains を使用すると、名前付きコミットを含むブランチ(つまり、先端コミットが名前付きコミットの子孫であるブランチ)のみが表示され、 --no-contains はそれを反転します。 --merged を使用すると、指定されたコミットにマージされたブランチ(つまり、指定されたコミットから先端コミットに到達できるブランチ)のみが一覧表示されます。 --no-merged を使用すると、指定されたコミットにマージされていないブランチのみが一覧表示されます。 <commit> 引数が欠落している場合、デフォルトで HEAD (つまり、現在のブランチの先端)になります。

コマンドの2番目の形式は、 現在の HEAD または、 指定されている場合は <start-point> を指す <branch-name> という名前の新しいブランチ・ヘッドを作成します。 特殊なケースとして、 <start-point> について、マージベースが1つしかない場合は、 <rev-A> と <rev-B> のマージベースのショートカットとして <rev-A>...<rev-B> を使用できます。 最大で <rev-A> と <rev-B> のどちらかを省略できます。 その場合、デフォルトで HEAD になります。

注意: これにより新しいブランチが作成されますが、 作業ツリーはそれに切り替わりません。 git switch <new-branch> を使用して、 新しいブランチに切り替えます。

ローカル・ブランチがリモート追跡ブランチから分岐して作成された場合、 Git はそのブランチに対して自動的に構成設定を行い(具体的には branch.<name>.remotebranch.<name>.merge の構成設定に対して自動的に設定を行う)、 git pull を実行したときに適切にリモート追跡ブランチからマージが行われるようにします。 この自動設定の動作は、 グローバルの branch.autoSetupMerge 構成設定で変更可能です。 この設定は --track--no-track オプションを使うことで上書きでき、 あとから git branch --set-upstream-to を使って変更することもできます。

-m または -M オプションを使用すると、 <old-branch> の名前を <new-branch> に名前変更します。 <old-branch> に対応する reflog がある場合は、 <new-branch> に一致するように名前変更され、 ブランチの名前変更を記憶するために reflog エントリが作成されます。 <new-branch> が既に存在する場合は、 -M を使用して名前の変更を強制する必要があります。

-c および -C オプションは、 -m および -M とまったく同一の意図(semantics)ですが、ブランチの名前が変更される代わりに、configおよびreflogとともに新しい名前にコピーされます。

-d または -D オプションを使用すると、 <branch-name> が削除されます。 削除するブランチを複数指定できます。 そのブランチに現在 reflog がある場合、 その reflog も削除されます。

-r-d と一緒に使用して、リモート追跡ブランチを削除します。 リモート追跡ブランチを削除するのは、 リモート・リポジトリーに存在しなくなった場合、または git fetch が再度フェッチしないように構成されている場合にのみ意味があることに注意してください。 廃止されたすべてのリモート追跡ブランチをクリーンアップする方法については、 git-remote(1) の「prune」サブコマンドも参照してください。

OPTIONS

-d
--delete

ブランチを削除します。 ブランチは、上流ブランチで完全にマージする必要があります。上流が --track または --set-upstream-to で設定されていない場合は、HEAD でマージする必要があります。

-D

--delete --force のショートカットです。

--create-reflog

ブランチのreflogを作成します。 これにより、 ブランチ参照に加えられたすべての変更の記録がアクティブになり、 <branch-name>@{yesterday} などの日付ベースのsha1式を使用できるようになります。 非ベア・リポジトリーでは、 通常、reflogはデフォルトで core.logAllRefUpdates 設定オプションによって有効になっていることに注意してください。 否定形式 --no-create-reflog は、それ以前の --create-reflog を上書きするだけですが、現在のところ core.logAllRefUpdates の設定を否定しません。

-f
--force

<branch-name> がすでに存在する場合でも、 <branch-name> を <start-point> にリセットします。 -f がないと、 git branch は既存のブランチの変更を拒否します。 -d(または --delete)と組み合わせて、 マージされたステータスに関係なく、または有効なコミットを指しているかどうかに関係なく、ブランチを削除できるようにします。 -m(または --move)と組み合わせて、新しいブランチ名がすでに存在する場合でもブランチの名前を変更できるようにします。同じことが -c(または --copy)にも当てはまります。

注意: git branch -f <branch-name> [<start-point>] は、 -f を指定しても、 同一ポジトリにリンクされた別のワークツリーでチェックアウトされている既存のブランチ <branch-name> を変更することを拒否することに注意してください。

-m
--move

ブランチを、その構成や reflog とともに 移動/名前変更 します。

-M

--move --force のショートカットです。

-c
--copy

ブランチを、その構成や reflog とともにコピーします。

-C

--copy --force のショートカットです。

--color[=<when>]

現在のブランチと、ローカルブランチと、リモート追跡ブランチを強調表示するためにブランチに色を付けます。値は always(デフォルト)または never または auto でなければなりません。

--no-color

構成ファイルでデフォルトのカラー出力が指定されている場合でも、ブランチの色付けをオフにします。 --color=never と同じです。

-i
--ignore-case

ブランチの並べ替えとフィルタリングでは英大文字小文字を区別しません(case insensitive)。

--omit-empty

書式が空の文字列に展開される。 書式化された参照の後ろに改行を出力しないでください。

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

ブランチの一覧表示を複数列に表示します。 オプションの構文については、構成変数 column.branch を参照してください。 オプションのない --column--no-column は、それぞれ alwaysnever と同等です。

このオプションは、非おしゃべりモード(non-verbose mode)でのみ適用できます。

--sort=<key>

<key> に基づいてソートします。 値の降順でソートする場合は、先頭に - を付けます。 --sort=<key> オプションは複数回指定することができ、 その場合、 最後に指定したキーが主キーとなります。 サポートされているキーは、 git-for-each-ref(1) で使用可能なものと同一です。 ソート順のデフォルトは、 branch.sort 構成変数に設定がある場合はその値を使用し、 そうでない場合はフルの参照名(refs/... プレフィックスを含む)に基づくソートとなります。 この場合、 存在する場合は切り離された HEAD (detached HEAD)が最初にリストされ、 次にローカル・ ブランチ、 最後にリモート追跡ブランチが続きます。 git-config(1) を参照してください。

-r
--remotes

リモート追跡ブランチを一覧表示または削除(-d とともに使用する場合)します。 オプションのパターンに一致するように --list と組み合わせます。

-a
--all

リモート追跡ブランチとローカル・ブランチの両方を一覧表示します。 --list と組み合わせて、オプションのパターンにマッチさせます。

-l
--list

ブランチを一覧表示します。 オプションで <pattern>... を使用します。 たとえば git branch --list 'maint-*' は、指定のパターン maint-* にマッチするブランチのみをリストします。

--show-current

現在のブランチの名前を出力します。 HEAD を切り離した(detached HEAD)状態では、何も出力されません。

-v
-vv
--verbose

リスト・モードの場合は、 sha1を表示し、 各ヘッドの件名と、 (存在する場合、 )上流ブランチとの関係をコミットします。 2回指定した場合は、 (存在する場合)リンクされたワークツリーのパスと、 上流ブランチの名前も出力します(git remote show <remote> も参照)。 注意: 現在のワークツリーの HEAD はパスが出力されないことに注意してください(常に現在のディレクトリになります)。

-q
--quiet

エラー以外のメッセージを抑制して、ブランチを作成または削除するときはもっと静かにしてください。

--abbrev=<n>

コミットオブジェクト名を示す詳細リストで、オブジェクトを一意に参照する、少なくとも16進数で <n> 桁の長さがある最短のプレフィックスを表示します。 デフォルト値は 7 で、 core.abbrev 構成オプションで上書きできます。

--no-abbrev

省略せずに、出力リストに完全なsha1を表示します。

-t
--track[=(direct|inherit)]

新しいブランチを作成するときは、 branch.<name>.remote および branch.<name>.merge 構成エントリをセットアップして、新しいブランチの「上流」追跡構成(upstream tracking configuration)を設定します。 この構成は、 git statusgit branch -v で、2つのブランチの間の関係を表示するようにgitに指示します。 さらに、引数なしで git pull に、新しいブランチがチェックアウトされたときに上流(upstream)からプルするように指示します。

オプションの引数に応じて、正確な上流(upstream)ブランチが選択されます。 -t または --track または --track=direct は、起点(start-point)ブランチ自体を上流として使用することを意味します。 --track=inherit は、起点ブランチの上流構成(upstream configuration)をコピーすることを意味します。

branch.autoSetupMerge 構成変数は、 --track--no-track も指定されていない場合に、 git switchgit checkoutgit branch がどのように振る舞うかを指定します:

オプションのデフォルトである true は、起点(start-point)がリモート追跡ブランチである場合はいつでも --track=direct が指定されたかのように振る舞います。 false は、--no-track が指定されたかのように振る舞います。 always は、--track=direct が指定されたかのように振る舞います。 inherit--track=inherit が与えられたかのように振る舞います。 simple は、起点(<start-point>)がリモート追跡ブランチであり、 かつ、 新しいブランチがリモート・ブランチと同じ名前を持つ場合にのみ、 --track=direct が指定されたかのように振る舞います。

branch.<name>.remote および branch.<name>.merge オプションの使用方法に関する追加の説明については、 git-pull(1) および git-config(1) を参照してください。

--no-track

branch.autoSetupMerge 構成変数がセットされている場合でも、 「upstream」構成をセットアップしないでください。

--recurse-submodules

このオプションは実験的機能です!(THIS OPTION IS EXPERIMENTAL!) submodule.propagateBranches が有効になっている場合、現在のコマンドをサブモジュール内でも再帰させます。 git-config(1)submodule.propagateBranches を参照してください。 現在、ブランチの作成のみがサポートされています。

ブランチの作成で使用すると、 新しいブランチ <branch-name> がスーパー・プロジェクト内に作成され、 すべてのサブモジュールがスーパー・プロジェクトの <start-point> に作成されます。 サブモジュールでは、 ブランチはスーパー・プロジェクトの <start-point> でサブモジュールのコミットを指しますが、 ブランチの追跡情報はサブモジュールのブランチとリモートに基づいて設定されます。 例えば git branch --recurse-submodules topic origin/main は、スーパー・プロジェクトの origin/main 内のサブモジュール・コミットを指すサブモジュール・ブランチ topic を作成しますが、 サブモジュールの origin/main を追跡します。

--set-upstream

このオプションは構文がわかりにくいため、サポートされなくなりました。 代わりに --track または --set-upstream-to を使用してください。

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

<branch-name> の追跡情報を設定して、 <upstream> が <branch-name> の上流ブランチと見なされるようにします。 <branch-name> が指定されていない場合、 デフォルトで現在のブランチになります。

--unset-upstream

<branch-name> の上流情報を削除します。 ブランチが指定されていない場合、デフォルトで現在のブランチになります。

--edit-description

エディタを開き、テキストを編集して、ブランチの目的を説明し、他のさまざまなコマンド(format-patch 、` request-pull` 、 merge (有効な場合) など)で使用できるようにします。 複数行の説明を使用できます。

--contains [<commit>]

指定の <commit> を含むブランチのみをリストします(指定されていない場合は HEAD)。 --list の指定を含んでいます。

--no-contains [<commit>]

指定の <commit> を含ま無いブランチのみをリストします(指定されていない場合は HEAD)。 --list の指定を含んでいます。

--merged [<commit>]

指定の <commit> から先端に到達できるブランチのみをリストします(指定されていない場合は HEAD)。 --list の指定を含んでいます。

--no-merged [<commit>]

指定の <commit> から先端に到達でき無いブランチのみをリストします(指定されていない場合は HEAD )。 --list の指定を含んでいます。

--points-at <object>

指定の <object> のブランチのみをリストします。

--format <format>

表示されているブランチ参照とそれが指すオブジェクトを %(fieldname) によって差し込みする書式文字列。 <format> はgit-for-each-ref(1) の形式と同じです。

<branchname>

作成または削除するブランチの名前。 新しいブランチ名は、 git-check-ref-format(1) で定義されているすべてのチェックに合格する必要があります。 これらのチェックの一部は、ブランチ名で使える文字を制限する場合があります。

<start-point>

新しいブランチ・ヘッドはこのコミットを指します。 ブランチ名またはコミットIDまたはタグとして指定できます。 このオプションを省略すると、 代わりに現在の HEAD が使用されます。

<oldbranch>

既存のブランチの名前。 このオプションを省略した場合は、 代わりに現在のブランチの名前が使用されます。

<newbranch>

既存のブランチの新しい名前。 <branch-name> と同じ制限が適用されます。

CONFIGURATION

pager.branch は、ブランチを一覧表示する場合、 つまり --list が使用または暗示されている場合にのみ尊重されます。 デフォルトでは pager を使用します。 git-config(1) を参照してください。

このセクションのこの行より上にあるものはすべて、 git-config(1) ドキュメントには含まれていません。 以下の内容に関しては、git-config(1) ドキュメント にあるものと同一です。

branch.autoSetupMerge

git branchgit switchgit checkout にて、 新しいブランチを作成する際に、 開始点のブランチから git-pull(1) が適切にマージするよう設定するかどうかを指示します。 このオプションが設定されていなくても、 ブランチごとに --track--no-track オプションを使ってこの振る舞いを選択できます。 このオプションのデフォルトは true です。 有効な設定値は以下の通りです:

false

自動設定は行われません

true

開始点がリモート追跡ブランチの場合に自動設定が行われます

always

開始点がローカル・ブランチまたはリモート追跡ブランチのいずれかの場合に自動設定が行われます

inherit

開始点に追跡構成(tracking configuration)があれば、 それを新しいブランチにコピーします

simple

開始点がリモート追跡ブランチの場合で、 かつ新しいブランチの名前がリモート・ブランチと同じ名前の場合にのみ自動設定が行われます。

branch.autoSetupRebase

新しいブランチを git branch または git switch または git checkout で作成し、 作成したそのブランチが別のブランチを追跡する場合、 この変数は git pull がマージではなくリベースを行うよう設定するかどうかを Git に指示します(branch.<name>.rebase を参照します)。 有効な設定値は以下の通りです:

never

リベースを自動的に true に設定することはありません。

local

他のローカル・ブランチを追跡するブランチに対して、 リベースを true に設定します。

remote

リモート追跡ブランチを追跡するブランチに対して、 リベースを true に設定します。

always

すべての追跡ブランチに対して、 リベースを true に設定します。

ブランチを別のブランチの追跡対象として設定する方法の詳細については、 branch.autoSetupMerge を参照してください。 なお、 このオプションのデフォルトは never です。

branch.sort

この変数は、 git-branch(1) によって表示されるときのブランチの並べ替え順序を制御します。 --sort=<value> オプションが指定されていない場合、この変数の値がデフォルトとして使用されます。 有効な値については、 git-for-each-ref(1) のfield namesを参照してください。

branch.<name>.remote

ブランチ <name> にいる場合、フェッチ元またはプッシュ先 のremoteを git fetchgit push に通知します。 プッシュ先のremoteは、 (全ブランチ用の) remote.pushDefault でオーバーライドできます。 現在のブランチの場合、プッシュ先のremoteは、 branch.<name>.pushRemote によってさらにオーバーライドされる可能性があります。 remoteが構成されていない場合、または、どのブランチにも属しておらずリポジトリに複数のremoteが定義されている場合、フェッチの場合は origin に、プッシュの場合は remote.pushDefault にデフォルト設定されます。 さらに、 . (ピリオド)は現在のローカルリポジトリ(ドットリポジトリ)です。下記 branch.<name>.merge の最後の注意を参照してください。

branch.<name>.pushRemote

ブランチ <name> にいる場合、プッシュするための branch.<name>.remote をオーバーライドします。 また、ブランチ<name>からプッシュするための remote.pushDefault をオーバーライドします。 ある場所(あなたのアップストリームなど)から別の場所(独自の公開リポジトリなど)にプッシュする場合は、 remote.pushDefault を設定して、すべてのブランチにプッシュするリモートを指定し、そして、このオプションを使用して 特定のブランチに対してオーバーライドします。

branch.<name>.merge

branch.<name>.remote とともに、指定されたブランチの上流ブランチを定義します。 マージするブランチを git fetch/git pull/git rebase に通知し、 git push にも影響を与える可能性があります(push.default 参照)。 ブランチ <name> にいる場合、 FETCH_HEAD でマージするためにマークされるデフォルトの refspec を git fetch に指示します。 値は refspec のリモート部分のように処理され、 branch.<name>.remote で指定されたリモートからフェッチされた参照と一致する必要があります。 マージ情報は、マージのためにデフォルトのブランチを検索するために git pull (最初に git fetch を呼び出します)によって使用されます。 このオプションがない場合、 git pull はデフォルトで、 フェッチされた最初の refspec をマージします。 octopus マージを取得するには、 複数値を指定します。 あなたがローカル・リポジトリー内の別のブランチから <name> にマージされるように git pull を設定したい場合は、 branch.<name>.merge が目的のブランチを指すようにして、 そして、 branch.<name>.remote には相対パス設定 . (ピリオド)が使用できます。

branch.<name>.mergeOptions

ブランチ <name> にマージするためのデフォルト・オプションを設定します。 構文とサポートされているオプションは git-merge(1) のものと同じですが、 空白文字を含むオプション値は現在サポートされていません。

branch.<name>.rebase

true の場合、 git pull の実行時にデフォルトのリモートからデフォルトのブランチをマージするのではなく、 フェッチされたブランチの上にブランチ <name> をリベースします。 ブランチ固有ではない方法でこれを行うには、 pull.rebase を参照してください。

merges (または単に m) の場合、 --rebase-merges オプションを git rebase に渡して、ローカル・マージ・コミットがリベースに含まれるようにします (詳細については git-rebase(1) を参照してください)。

値が interactive (または単に i)の場合、リベースは対話モードで実行されます。

注意: これはおそらく危険な操作です。 あなたが影響を理解していない限り、使用しないでください (詳細については、 git-rebase(1) を参照してください)。

branch.<name>.description

ブランチの説明は、 git branch --edit-description で編集できます。 ブランチの説明は、 format-patch のカバーレターまたは request-pull の概要に自動的に追加されます。

EXAMPLES

既知のタグから開発開始
$ 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 switch 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. 「master」ブランチ(または現在チェックアウトされているブランチ)にtestブランチからのすべてのコミットがない場合でも、「test」ブランチを削除します。

指定のリモートからのブランチをリストする
$ git branch -r -l '<remote>/<pattern>'                 <1>
$ git for-each-ref 'refs/remotes/<remote>/<pattern>'    <2>
  1. -a を使用すると、 <remote> が、 あなたがたまたま同一の <remote> パターンでプレフィックスを付けたローカル・ブランチと混同されてしまいます。

  2. for-each-ref は幅広いオプションをとることができます。 git-for-each-ref(1) を参照してください

通常、パターンにはクォートが必要です。

NOTES

すぐに切り替えたいブランチを作成する場合は、 git switch コマンドとその -c オプションを使用して、1つのコマンドで同じことを行う方が簡単です。

オプション --contains と ` --no-contains` と --merged--no-merged は、4つの関連しているが異なる目的を果たします:

  • --contains <commit> は、<commit> がリベースまたは修正された場合に特別な注意が必要なすべてのブランチを検索するために使用されます。これらのブランチには、指定された <commit> が含まれているためです。

  • --no-contains <commit> はその逆です。つまり、指定された <commit> を含まないブランチです。

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

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

複数の --contains フィルターと --no-contains フィルターを組み合わせる場合、少なくとも1つの --contains コミットを含み、 --no-contains コミットを含まない参照のみが表示されます。

複数の --merged フィルターと --no-merged フィルターを組み合わせると、少なくとも1つの --merged コミットから到達可能で、 --no-merged コミットのいずれからも到達できない参照のみが表示されます。

SEE ALSO

GIT

Part of the git(1) suite