English ▾ トピック ▾ 最新バージョン ▾ git-branch は 2.50.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] <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>]

説明

--list が指定されている場合、またはオプション以外の引数がない場合、既存のブランチが一覧表示されます。現在のブランチは緑色でハイライトされ、アスタリスクでマークされます。リンクされたワークツリーでチェックアウトされているブランチはシアンでハイライトされ、プラス記号でマークされます。オプション -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> のうち最大1つを省略でき、その場合、デフォルトは HEAD になります。

これにより新しいブランチが作成されますが、ワーキングツリーは新しいブランチに切り替わらないことに注意してください。新しいブランチに切り替えるには git switch <new-branch> を使用してください。

ローカルブランチがリモートトラッキングブランチから開始されると、Git はブランチ (特に branch.<name>.remote および branch.<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 とまったく同じセマンティクスを持ちますが、ブランチが名前変更される代わりに、設定と reflog とともに新しい名前にコピーされます。

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

リモートトラッキングブランチを削除するには、-r-d を組み合わせて使用します。リモートトラッキングブランチを削除するのは、リモートリポジトリに存在しなくなった場合、または git fetch がそれらを再度フェッチしないように設定されている場合にのみ意味があることに注意してください。すべての古いリモートトラッキングブランチをクリーンアップする方法については、git-remote[1]prune サブコマンドも参照してください。

オプション

-d
--delete

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

-D

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

--create-reflog

ブランチの reflog を作成します。これにより、ブランチ ref に加えられたすべての変更の記録がアクティブになり、<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

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

--omit-empty

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

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

ブランチリストをカラムで表示します。オプションの構文については、設定変数 column.branch を参照してください。オプションなしの --column--no-column は、それぞれ alwaysnever に相当します。

このオプションは、非詳細モードでのみ適用可能です。

--sort=<key>

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

-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 を一覧表示します。

-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 設定変数は、git switchgit checkout、および git branch--track--no-track も指定されていない場合にどのように動作するかを指定します。

デフォルトオプションの true は、開始点がリモートトラッキングブランチである場合、常に --track=direct が指定されたかのように動作します。false は、--no-track が指定されたかのように動作します。always は、常に --track=direct が指定されたかのように動作します。inherit は、--track=inherit が指定されたかのように動作します。simple は、<start-point> がリモートトラッキングブランチであり、新しいブランチがリモートブランチと同じ名前である場合にのみ、--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> にあるスーパープロジェクトとすべてのサブモジュールに新しいブランチ <branch-name> が作成されます。サブモジュールでは、ブランチはスーパープロジェクトの <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-patchrequest-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>

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

<branch-name>

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

<start-point>

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

<old-branch>

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

<new-branch>

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

設定

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

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

branch.autoSetupMerge

git branchgit switch、および git checkout に、git-pull[1] が開始点ブランチから適切にマージするように新しいブランチを設定するよう指示します。このオプションが設定されていなくても、--track および --no-track オプションを使用してブランチごとにこの動作を選択できることに注意してください。このオプションのデフォルトは true です。有効な設定は次のとおりです。

false

自動設定は行われません

true

開始点がリモートトラッキングブランチである場合に自動設定が行われます

always

開始点がローカルブランチまたはリモートトラッキングブランチのいずれかである場合に自動設定が行われます

inherit

開始点にトラッキング設定がある場合、それが新しいブランチにコピーされます

simple

自動設定は、開始点がリモートトラッキングブランチであり、新しいブランチがリモートブランチと同じ名前である場合にのみ行われます。

branch.autoSetupRebase

git branchgit switch、または git checkout で他のブランチを追跡する新しいブランチが作成されるとき、この変数は Git に、git pull が実行されたときに、マージではなくリベースするようにプルを設定するよう指示します (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 fetch および git 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>.remote とともに、指定されたブランチのアップストリームブランチを定義します。git fetch/git pull/git rebase にどのブランチをマージするかを指示し、git push にも影響を与える可能性があります (push.default を参照)。ブランチ <name> にいる場合、git fetchFETCH_HEAD でマージ用にマークされるデフォルトの refspec を指示します。値は refspec のリモート部分と同様に扱われ、branch.<name>.remote で与えられたリモートからフェッチされる ref と一致する必要があります。マージ情報は git pull (最初に git fetch を呼び出す) によって、マージのデフォルトブランチを検索するために使用されます。このオプションがない場合、git pull はフェッチされた最初の refspec をマージするようデフォルト設定されます。複数の値を指定すると、オクトパスマージが行われます。git pull を設定して、ローカルリポジトリの別のブランチから <name> にマージしたい場合は、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 の要約に自動的に追加されます。

既知のタグから開発を開始する
$ 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」を削除します。これらを再度フェッチしないように設定しない限り、次の git fetch または git pull でこれらは再び作成されます。git-fetch[1] を参照してください。

  2. 「master」ブランチ (または現在チェックアウトされているブランチ) にテストブランチのすべてのコミットが含まれていない場合でも、「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 オプションを使用して、同じことを1つのコマンドで実行する方が簡単です。

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

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

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

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

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

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

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

GIT

git[1]スイートの一部

scroll-to-top