Gitの現在のブランチのみを表示する


356

このために特別なGitコマンドを探しましたが、見つかりませんでした。以下よりも短いまたは速いものはありますか?

git branch | awk '/\*/ { print $2; }'

1
私はこれが現在のブランチを取得する最速の方法だと思います
Eimantas


@ChandrayyaGK:いいえ、もう1つの質問はIDE内から実行することです。(回答の多くはコマンドラインでの使用のためのものなので、一見の価値はありますが、適切な複製ではありません。すでにここにあるものに大きな価値をもたらすものがある場合は、それらの回答をおそらくここに移行する必要があります。)
tripleee 2014年

3
@Torek-Gitによって困難になった別の簡単なタスクを次に示します。
jww 2016年

@ChandrayyaGKが投稿したリンクへのトップの回答は、これよりもはるかに遅いです!
Colm Bhandal 2018年

回答:


660
$ git rev-parse --abbrev-ref HEAD
master

これはGit 1.6.3以降で動作するはずです。


私にとっても、git-1.6.2.5では動作しません。git rev-parse --abbrev-ref HEAD => --abbrev-ref 311172491a9a667f9321bdf1c4fe5e22cc6e2c08(つまり、rev-parseは--abbrev-refを受け入れません(マニュアルページにもありません))
JasonWoof

1
JasonWoof、私にとって1.6.4.2で機能し、いつログが正確に発生したかを確認するためにログを変更する必要があります;-)
マイケルクレリン-ハッカー

7
Gitログからわかる限り、この機能は2009-04-20に統合され、バージョン1.6.3でリリースされました。
アール

1
それも本当に理解したいです。これは実際にはどのように機能しますか?また、--abbrev-refは他の引数に対して何も返さないように見えます。HEADを引数として持つことはできません。
Setafire 2016年

6
デタッチされたシンボリックリファレンスを使用している場合(ブランチにいるが、以前のコミットをチェックアウトしている可能性がある)、このコマンドはを返すだけHEADであり、予期されていないことにmaster
注意してください

129

Git 1.8.1 では、「-short」オプションを指定してgit symbolic-refコマンドを使用できます。

$ git symbolic-ref HEAD
refs/heads/develop
$ git symbolic-ref --short HEAD
develop

ありがとう。エイリアスが作成されました。
Michael Burr

7
承認された回答IMOより優れています。コミットなしのリポジトリで機能するためです
Jerome Dalbert

2
fatal: ref HEAD is not a symbolic refTravisCIビルドの一部としてこれを実行するとエラーが発生する
kmanzana

GIT 1.9.1 `` `で動作していないようですgitバージョン1.9.1 fatal:ref HEADはシンボリックな参照` ``ではありません
Richard

私のために働く:gitバージョン2.16.2.windows.1
Tagc

59

Git 2.22(2019年第2四半期)を使用すると、よりシンプルなアプローチになりますgit branch --show-current

Daniels Umanovskis()によるcommit 0ecb1fc(2018年10月25日)を参照してください。(合併によりJunio C浜野- -3710f60コミットし、2019年3月7日)をumanovskis
gitster

branch--show-current表示オプションの紹介

で呼び出されると--show-currentgit branch現在のブランチ名を出力して終了します。
実際の名前のみが印刷され、は含まれませんrefs/heads
デタッチされたHEAD状態では、何も出力されません。

スクリプティングとインタラクティブ/有益な使用の両方を目的としています。
とは異なりgit branch --list、ブランチ名を取得するためだけにフィルタリングする必要はありません。


15
最後に、最初からあったはずのように見えるものが追加されました!
dtasev

27

あなたはの出力に興味があるかもしれません

git symbolic-ref HEAD

特に、あなたのニーズとレイアウトに応じて、あなたがしたいかもしれません

basename $(git symbolic-ref HEAD)

または

git symbolic-ref HEAD | cut -d/ -f3-

そして、.git/HEADあなたにとっても興味深いかもしれないファイルがあります。


2
あなたは短縮することができますgit rev-parse --symbolic-full-namegit symbolic-ref
アール

1
basenameまたはを使用する必要はありませんcut。使用しますBR=${BR#refs/heads/}(BRはの出力を保存した変数の名前ですgit symbolic-ref HEAD)。
JakubNarębski、2009

もちろん、出力が変数にある場合は、Jakubはそうではありません。
マイケルクレリン-ハッカー、2009年

5
git symbolic-ref --short HEADまた、実行可能
Fahad Siddiqui、

2
ブランチ名にスラッシュがある場合、これは壊れます( "task / foo"、 "feature / bar")。スラッシュがクールだと同僚が決めたとき、私のビルドスクリプトの多くが失敗し始めました...
vacri

13

私が言えることから、Gitの現在のブランチだけをネイティブに表示する方法はないため、以下を使用しています。

git branch | grep '*'

3
これはGNU coreutilsで動作しますgrep '*'が、名目上は構文エラーです。git branch | sed -n 's/^\* //p'とにかく欲しくなるでしょう。または実際には、OPが最初に投稿したものと同じです。
tripleee 2014年

@tripleee grep '*'名目上構文エラーである理由を教えてください。
JK ABC

1
@JKABC:@tripleeeが意味するのは、これ'*'は正規表現であり、そのため無効です。おそらく使用する必要があります'[*]'(つまり、*「ゼロ回以上」の演算子の代わりに文字)。
johndodo 2017年

2
@johndodoは明確にしてくれてありがとう、それは今私には理にかなっています。私は通常それを行うgrep '\*'
JK ABC

2
ブランチ名のみをカットできますgit branch | grep "*" | cut -d' ' -f2
Fahad Siddiqui

7

これは速く、Python APIで使用できるはずです。

git branch --contains HEAD
* master

4
これは現在のブランチを出力しません。たまたまHEADが指すコミットを指すブランチのリストを出力します。そして、はい、それは重複する可能性がありますが、これは誤解につながる可能性があります。現在の場所から新しいブランチを作成し、ラインを再試行します:2つのブランチ。質問は「現在のブランチのみ」を要求します。
RomainValeri

4

私は使っています

/etc/bash_completion.d/git

これはGitに付属しており、ブランチ名と引数の完了を示すプロンプトを提供します。


このプロンプトはどのようにアクティブ化できますか?
Alex

Ubuntuでは、$ source /etc//bash_completion.d/git-prompt ファイルの名前はシステムによって異なる場合があります。(注:sourceキーワードは.bashの(ドット)と同じです。)
マイケル

1

これは短くはありませんが、デタッチされたブランチも扱います。

git branch | awk -v FS=' ' '/\*/{print $NF}' | sed 's|[()]||g'

1

完全性のために、 echo $(__git_ps1)を期すために、少なくともLinuxでは、括弧で囲まれた現在のブランチの名前が表示されます。

これは、(現在のブランチを表示するようにBashコマンドプロンプトを設定する場合は特に)Gitコマンドではない(Gitに依存している)ため、いくつかのシナリオで役立ちます。

例えば:

/mnt/c/git/ConsoleApp1 (test-branch)> echo $(__git_ps1)
(test-branch)
/mnt/c/git/ConsoleApp1 (test-branch)> git checkout master
Switched to branch 'master'
/mnt/c/git/ConsoleApp1 (master)> echo $(__git_ps1)
(master)
/mnt/c/git/ConsoleApp1 (master)> cd ..
/mnt/c/git> echo $(__git_ps1)

/mnt/c/git>

アイテムはエイリアスであり、対話型シェルスクリプトに存在する必要があります。おそらくあらゆる種類のスクリプトには存在しません。
Alexander Stohr

0

誰かがこれを参考にするかもしれません()。現在のブランチは*マークで示されています。git show-branch --current

host-78-65-229-191:idp-mobileid user-1$ git show-branch --current
! [CICD-1283-pipeline-in-shared-libraries] feat(CICD-1283): Use latest version of custom release plugin.
 * [master] Merge pull request #12 in CORES/idp-mobileid from feature/fix-schema-name to master
--
+  [CICD-1283-pipeline-in-shared-libraries] feat(CICD-1283): Use latest version of custom release plugin.
+  [CICD-1283-pipeline-in-shared-libraries^] feat(CICD-1283): Used the renamed AWS pipeline.
+  [CICD-1283-pipeline-in-shared-libraries~2] feat(CICD-1283): Point to feature branches of shared libraries.
-- [master] Merge pull request #12 in CORES/idp-mobileid from feature/fix-schema-name to master
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.