日本語 ▾ トピック ▾ 最新バージョン ▾ 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つだけある場合、AB のマージベースのショートカットとして "A...B" を使用できます。AB のうち、最大1つを省略することができ、その場合はデフォルトで HEAD になります。

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

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

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

-c および -C オプションは、-m および -M と全く同じセマンティクスを持ちますが、ブランチが名前変更される代わりに、設定とリフロッグとともに新しい名前にコピーされます。

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

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

オプション

-d
--delete

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

-D

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

--create-reflog

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

-f
--force

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

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

-m
--move

ブランチを、その設定とリフロッグとともに移動/名前変更します。

-M

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

-c
--copy

ブランチを、その設定とリフロッグとともにコピーします。

-C

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

--color[=<when>]

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

--no-color

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

-i
--ignore-case

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

--omit-empty

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

--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

現在のブランチの名前を出力します。detached 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 status および git branch -v で2つのブランチ間の関係が表示されるようGitに指示されます。さらに、新しいブランチがチェックアウトされたときに、引数なしの git pull がアップストリームからプルするように指示されます。

正確なアップストリームブランチは、オプションの引数に応じて選択されます。-t--track、または --track=direct は、開始点ブランチ自体をアップストリームとして使用することを意味します。--track=inherit は、開始点ブランチのアップストリーム設定をコピーすることを意味します。

branch.autoSetupMerge 設定変数は、--track--no-track のどちらも指定されていない場合に、git switchgit checkout、および git branch がどのように動作すべきかを指定します。

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

branch.<name>.remote および branch.<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>

<branchname> の追跡情報を設定し、<upstream><branchname> のアップストリームブランチと見なされるようにします。<branchname> が指定されていない場合、現在のブランチがデフォルトになります。

--unset-upstream

<branchname> のアップストリーム情報を削除します。ブランチが指定されていない場合、現在のブランチがデフォルトになります。

--edit-description

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

--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 変数に設定された値が存在する場合はそれに従い、存在しない場合はフルリファレンス名(refs/... プレフィックスを含む)に基づいてソートされます。これにより、detached HEAD(存在する場合)が最初に、次にローカルブランチ、最後にリモート追跡ブランチがリストされます。git-config[1] を参照してください。

--points-at <object>

指定されたオブジェクトのブランチのみを一覧表示します。

--format <format>

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

設定

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

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

branch.autoSetupMerge

git branchgit switch、および git 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>.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 をマージすることをデフォルトとします。オクパスマージを行うには複数の値を指定します。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) の場合、ローカルのマージコミットがリベースに含まれるように、git rebase--rebase-merges オプションを渡します(詳細については 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」という単一のステップに結合できます。

不要なブランチを削除する
$ 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] を参照してください。

パターンは通常、クォーティングが必要です。

注記

すぐに切り替えたいブランチを作成している場合、-c オプションを付けた「git switch」コマンドを使用する方が、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 フィルターを組み合わせる場合、--contains コミットの少なくとも1つを含み、かつ --no-contains コミットのいずれも含まない参照のみが表示されます。

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

GIT

git[1] スイートの一部

scroll-to-top