git-branch

コマンド名

「git-branch」:ブランチを一覧表示、作成、または削除

概要

git branch [--color[=<when>] | --no-color] [--show-current]
[-v [--abbrev=<length> | --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 | --no-track] [-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 (-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"を使用できます。AとBの最大1つを省略できます。その場合、デフォルトでHEADとなります。
これにより新しいブランチが作成されますが、ワークツリーがそれに切り替わらないことに注意してください。「gitswitch <newbranch>」を使用して、新しいブランチに切り替えます。
ローカルブランチがリモート追跡ブランチから開始されると、Gitはブランチ(具体的にはbranch.<name>.remoteとbranch.<name>.merge構成エントリ)をセットアップし、「gitpull」がリモート追跡ブランチから適切にマージされるようにします。この動作はグローバル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 を一緒に使用し、リモート追跡ブランチを削除します。リモート追跡ブランチを削除するのはリモートリポジトリに存在しなくなった場合、または「gitfetch」が再度フェッチしないように構成されている場合にのみ意味があることに注意してください。廃止されたすべてのリモート追跡ブランチをクリーンアップする方法については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>を<startpoint>にリセットします。-fがない場合、gitブランチは既存のブランチの変更を拒否します。-d(または--delete)と組み合わせて、マージされたステータスに関係なくブランチを削除できるようにします。-m (または--move)と組み合わせて、新しいブランチ名がすでに存在する場合でもブランチの名前を変更できるようにします。同じことが-c(または--copy)にも当てはまります。

-m
--move

ブランチと対応する参照ログを移動もしくは名前変更します。

-M

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

-c
--copy

ブランチと対応する参照ログをコピーします。
-C
–copy –forceのショートカットです。

-color[=<when>]

現在、ローカルおよびリモート追跡ブランチをハイライトするためにブランチに色を付けます。値は常に(デフォルトで)、「never」、または「auto」である必要があります。

--no-color

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

-i
--ignore-case

ブランチの並べ替えとフィルタリングでは大文字と小文字は区別されません。

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

ブランチリストを列で表示します。オプションの構文については構成変数「column.branch」を参照してください。.—columnおよび--no-columnオプションなしはそれぞれ「always」および「never」と同等となります。
このオプションは非言語モードでのみ適用できます。

-r
--remotes

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

-a
--all

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

-l
--list

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

--show-current

現在のブランチの名前を出力します。ヘッドを切り離した状態では何も印刷されません。

-v
-vv
--verbose

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

-q
--quiet

ブランチを作成または削除する時、エラー以外のメッセージを抑制し、よりクワイエットにします。

--abbrev=<length>

出力リストで「sha1」の最小表示の長さの変更をします。デフォルト値は7であり、core.abbrev構成オプションで上書きできます。

--no-abbrev

省略形ではなく、出力リストに完全な「sha1」を表示します。

-t
--track

新しいブランチを作成する時、branch.<name>.remoteおよびbranch.<name>.merge構成エントリを設定して、開始点ブランチを新しいブランチの「アップストリーム」としてマークします。 この構成はgit statusおよびgit branch -vの2つのブランチ間の関係を表示するようにgitに指示します。さらに新しいブランチがチェックアウトされた時、引数なしでgit pullをアップストリームからプルするように指示します。
この動作は開始点がリモート追跡ブランチである場合のデフォルトとなります。git switchgit checkoutgit branch を常に--no-trackが指定されているかのように動作させる場合、「branch.autoSetupMerge」構成変数をfalseに設定します。開始点がローカルまたはリモート追跡ブランチのいずれかであるときにこの動作が必要な場合、always設定します。

--no-track

「branch.autoSetupMerge」構成変数が「true」の場合でも、「アップストリーム」構成をセットアップしません。

--set-upstream

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

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

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

--unset-upstream

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

--edit-description

エディターを開き、テキストを編集し、ブランチの目的を説明し、他のさまざまなコマンド(format-patchrequest-pullmerge(有効な場合)など)で使用できるようにします。複数ラインの説明が使用される場合があります。

--contains [<commit>]

指定されたコミットを含むブランチのみを一覧表示します(指定されていない場合はヘッドとなります)。--listを意味します。

--no-contains [<commit>]

指定されたコミットを含まないブランチのみを一覧表示します(指定されていない場合はヘッドです)。--listを意味します。

--merged [<commit>]

指定されたコミットからヒントに到達できるブランチのみを一覧表示します(指定されていない場合はヘッドとなります)。--listを意味します。

--no-merged [<commit>]

指定されたコミットからヒントに到達できないブランチのみを一覧表示します(指定されていない場合はヘッドとなります)。--listを意味します。

<branchname>

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

<start-point>

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

<oldbranch>

名前を変更する既存のブランチの名前です。

<newbranch>

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

--sort=<key>

指定されたキーに基づいて並べ替えます。プレフィックス-値を降順で並べ替えます。「–sort = <key>」オプションを複数回使用できます。その場合、最後のキーが主キーになります。サポートされているキーはgit for-each-refキーと同じです。ソート順のデフォルトはbranch.sort変数に構成されている値であり(存在する場合)、または完全な参照名(refs/…プレフィックスを含む)に基づくソートです。これは最初に切り離されたヘッドであり(存在する場合)、次にローカルブランチ、最後にリモートトラッキングブランチを一覧表示します。git-config[1]を参照してください。

--points-at <object>

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

--format <format>

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

構成

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

既知のタグから開発を開始します

$ 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 -bmy2.6.14v2.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[1]を参照してください。
  2. 「マスター」ブランチ(または現在チェックアウトされているブランチ)にテストブランチからのすべてのコミットがない場合でも「テスト」ブランチを削除します。

特定のリモートからのブランチの一覧表示

$ 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]を参照してください

通常、パターンには引用符が必要となってきます。

注記

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

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

  1. --contains <commit>は<commit>がリベースまたは修正された場合に特別の注意が必要なすべてのブランチを検索するために使用されます。これらのブランチには指定された<commit>が含まれているためです。
  2. --no-contains <commit>はその逆です。つまり、指定された<commit>を含まないブランチとなっています。
  3. --mergedは安全に削除できるすべてのブランチを検索するために使用されます。これらのブランチはヘッドに完全に含まれているためです。
  4. –no-mergedはヘッドにマージする候補となるブランチを見つけるために使用されます。これらのブランチはヘッドに完全には含まれていないためです。

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

参照

Gitユーザーマニュアルの「git-check-ref-format[1]、git-fetch[1]、git-remote[1]、“Understanding history: What is a branch?”」

GIT

  git[1]パッケージソフトの一部

git公式ドキュメント

branch