Git
英語 ▾ トピック ▾ 最新バージョン ▾ git-branch は 2.44.0 で最後に更新されました

名前

git-branch - ブランチの一覧表示、作成、または削除

概要

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] <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 (-c | -C) [<oldbranch>] <newbranch>
git branch (-d | -D) [-r] <branchname>…​
git branch --edit-description [<branchname>]

説明

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

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

<pattern> を指定する場合は、--list を使用する必要があります。そうでない場合、コマンドはブランチ作成として解釈される可能性があります。

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

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

これは新しいブランチを作成しますが、ワークツリーをそれに切り替えることはありません。「git switch <newbranch>」を使用して新しいブランチに切り替えます。

ローカルブランチがリモート追跡ブランチから開始されると、Git はブランチ(具体的には branch.<name>.remotebranch.<name>.merge の構成エントリ)を設定するため、git pull はリモート追跡ブランチから適切にマージされます。この動作は、グローバルな branch.autoSetupMerge 構成フラグを使用して変更できます。その設定は、--track--no-track オプションを使用してオーバーライドし、後で git branch --set-upstream-to を使用して変更できます。

-m または -M オプションを使用すると、<oldbranch> は <newbranch> に名前変更されます。<oldbranch> に対応する reflog がある場合、それは <newbranch> に合わせて名前変更され、ブランチの名前変更を覚える reflog エントリが作成されます。<newbranch> が存在する場合、名前変更を強制的に行うには -M を使用する必要があります。

-c-C オプションは、-m-M とまったく同じセマンティクスを持ちますが、ブランチの名前が変更される代わりに、その設定と reflog とともに新しい名前にコピーされます。

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

リモート追跡ブランチを削除するには、-d と共に -r を使用します。リモートリポジトリに存在しなくなった場合、またはgit fetchがそれらを再度フェッチしないように設定されている場合にのみ、リモート追跡ブランチを削除することが理にかなっています。git-remote[1]pruneサブコマンドも参照してください。これは、すべての廃止されたリモート追跡ブランチをクリーンアップする方法です。

オプション

-d
--delete

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

-D

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

--create-reflog

ブランチの reflog を作成します。これにより、ブランチ ref に対して行われたすべての変更の記録が有効になり、「<branchname>@{yesterday}」などの日付ベースの sha1 式の使用が可能になります。非ベアリポジトリでは、reflog は通常、core.logAllRefUpdates 構成オプションによってデフォルトで有効になっています。否定形である --no-create-reflog は、以前の --create-reflog をオーバーライドするだけです。現在、core.logAllRefUpdates の設定を無効にすることはありません。

-f
--force

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

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

-m
--move

ブランチとその設定、reflog をまとめて移動/名前変更します。

-M

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

-c
--copy

ブランチとその設定、reflog をまとめてコピーします。

-C

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

--color[=<when>]

現在のブランチ、ローカルブランチ、リモート追跡ブランチを強調表示するためにブランチの色付けを行います。値は always(デフォルト)、never、または auto のいずれかである必要があります。

--no-color

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

-i
--ignore-case

ブランチのソートとフィルタリングで大文字と小文字を区別しません。

--omit-empty

フォーマットされた ref で、フォーマットが空文字列に展開される場合、改行を出力しません。

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

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

このオプションは、冗長モード以外では適用できません。

-r
--remotes

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

-a
--all

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

-l
--list

ブランチの一覧を表示します。オプションの <pattern>... (例:git branch --list 'maint-*')を使用して、パターンに一致するブランチのみを表示します。

--show-current

現在のブランチの名前を出力します。デタッチされた HEAD 状態では、何も出力されません。

-v
-vv
--verbose

リストモードの場合、各ヘッドのSHA1とコミットのサブジェクトラインを表示します。また、(存在する場合)上流ブランチとの関係も表示します。2回指定された場合は、リンクされたワークツリーのパス(存在する場合)と上流ブランチの名前も表示します(git remote show <remote>も参照)。現在のワークツリーのHEADは、パスが表示されません(常に現在のディレクトリになります)。

-q
--quiet

ブランチの作成または削除時により静かに動作し、エラー以外のメッセージを表示しません。

--abbrev=<n>

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

--no-abbrev

出力リストでSHA1を短縮するのではなく、完全なSHA1を表示します。

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

新しいブランチを作成する際に、branch.<name>.remotebranch.<name>.mergeの設定項目を設定して、新しいブランチの上流追跡設定を行います。この設定により、gitはgit statusgit branch -vで2つのブランチ間の関係を表示します。さらに、引数なしでgit pullを実行すると、新しいブランチをチェックアウトした際に上流からプルします。

正確な上流ブランチは、オプションの引数によって異なります。-t--track、または--track=directは、開始点ブランチ自体を上流として使用することを意味します。--track=inheritは、開始点ブランチの上流設定をコピーすることを意味します。

branch.autoSetupMerge設定変数は、--track--no-trackも指定されていない場合のgit switchgit checkoutgit branchの動作を指定します。

デフォルトオプションのtrueは、開始点がリモート追跡ブランチである場合に--track=directが指定された場合と同様に動作します。falseは、--no-trackが指定された場合と同様に動作します。alwaysは、--track=directが指定された場合と同様に動作します。inheritは、--track=inheritが指定された場合と同様に動作します。simpleは、開始点がリモート追跡ブランチであり、新しいブランチの名前がリモートブランチと同じである場合にのみ、--track=directが指定された場合と同様に動作します。

branch.<name>.remotebranch.<name>.mergeオプションの使用方法については、git-pull[1]git-config[1]を参照してください。

--no-track

branch.autoSetupMerge設定変数が設定されている場合でも、「上流」設定を行いません。

--recurse-submodules

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

ブランチの作成で使用する場合、スーパープロジェクトとスーパープロジェクトの<start-point>にあるすべてのサブモジュールに新しいブランチ<branchname>が作成されます。サブモジュールでは、ブランチはスーパープロジェクトの<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>

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

--unset-upstream

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

--edit-description

エディタを開いて、ブランチの目的を説明するテキストを編集します。これは、さまざまな他のコマンド(例:format-patchrequest-pullmerge(有効になっている場合))で使用されます。複数行の説明を使用できます。

--contains [<commit>]

指定されたコミット(指定されていない場合はHEAD)を含むブランチのみをリストします。--listを意味します。

--no-contains [<commit>]

指定されたコミット(指定されていない場合はHEAD)を含まないブランチのみをリストします。--listを意味します。

--merged [<commit>]

指定されたコミット(指定されていない場合はHEAD)から到達可能な先端を持つブランチのみをリストします。--listを意味します。

--no-merged [<commit>]

指定されたコミット(指定されていない場合はHEAD)から到達不可能な先端を持つブランチのみをリストします。--listを意味します。

<branchname>

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

<start-point>

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

<oldbranch>

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

<newbranch>

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

--sort=<key>

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

--points-at <object>

指定されたオブジェクトのブランチのみをリストします。

--format <format>

表示されているブランチrefとそれが指すオブジェクトから%(fieldname)を補間する文字列。形式はgit-for-each-ref[1]と同じです。

設定

pager.branchは、ブランチをリストする場合、つまり--listが使用されているか暗黙的に使用されている場合にのみ尊重されます。デフォルトでは、ページャーが使用されます。git-config[1]を参照してください。

このセクションの上記のすべての行は、git-config[1]のドキュメントから含まれていません。以下の内容は、そこに記載されているものと同じです。

branch.autoSetupMerge

git branchgit switchgit checkoutに新しいブランチを設定して、git-pull[1]が開始点ブランチから適切にマージするように指示します。このオプションが設定されていない場合でも、--track--no-trackオプションを使用して、ブランチごとにこの動作を選択できます。有効な設定は次のとおりです。false - 自動設定は行われません。true - 開始点がリモート追跡ブランチである場合に自動設定が行われます。always - 開始点がローカルブランチまたはリモート追跡ブランチのいずれの場合でも自動設定が行われます。inherit - 開始点に追跡設定がある場合は、それが新しいブランチにコピーされます。simple - 開始点がリモート追跡ブランチであり、新しいブランチの名前がリモートブランチと同じである場合にのみ自動設定が行われます。このオプションのデフォルトはtrueです。

branch.autoSetupRebase

別のブランチを追跡する新しいブランチがgit branchgit switch、またはgit checkoutで作成されると、この変数は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]のフィールド名を参照してください。

branch.<name>.remote

<name>ブランチにいる場合、git fetchgit pushでフェッチ元またはプッシュ先のリモートを指定します。プッシュ先のリモートは、remote.pushDefault(すべてのブランチ)で上書きできます。現在のブランチに対するプッシュ先のリモートは、branch.<name>.pushRemoteでさらに上書きできます。リモートが設定されていない場合、またはブランチに存在せず、リポジトリに複数のリモートが定義されている場合、フェッチにはorigin、プッシュにはremote.pushDefaultがデフォルトになります。さらに、.(ピリオド)は現在のローカルリポジトリ(ドットリポジトリ)です。以下のbranch.<name>.mergeの最後の注記を参照してください。

branch.<name>.pushRemote

<name>ブランチにいる場合、プッシュのためにbranch.<name>.remoteを上書きします。また、<name>ブランチからのプッシュに対してremote.pushDefaultを上書きします。ある場所(例:上流)からプルし、別の場所(例:独自の公開リポジトリ)にプッシュする場合は、remote.pushDefaultを設定してすべてのブランチのプッシュ先のリモートを指定し、このオプションを使用して特定のブランチに対してそれを上書きします。

branch.<name>.merge

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

branch.<name>.mergeOptions

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

branch.<name>.rebase

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

merges(または単にm)の場合、ローカルのマージコミットがrebaseに含まれるように、git rebase--rebase-mergesオプションを渡します(詳細はgit-rebase[1]を参照)。

値がinteractive(または単にi)の場合、rebaseはインタラクティブモードで実行されます。

注意:これは危険な操作の可能性があります。影響を理解していない限り、使用しないでください(詳細はgit-rebase[1]を参照)。

branch.<name>.description

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

既知のタグから開発を開始する
$ 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]を参照してください。

パターンは通常、引用符で囲む必要があります。

注記

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

オプション--contains--no-contains--merged、および--no-mergedは、関連する4つの異なる目的を果たします。

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

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

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

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

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

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

Git

git[1]スイートの一部

scroll-to-top