web-dev-qa-db-ja.com

Gitで現在のブランチ名を取得する方法

私はSubversionのバックグラウンドから来ました、そして私がブランチを持っていたとき、私は「これらの作業ファイルはこのブランチを指しています」で取り組んでいたことを知っていました。

しかし、Gitでは、NetBeansまたはNotepad ++でファイルを編集しているとき、それがマスターまたは他のブランチに関連しているかどうかはわかりません。

Bashのgitに問題はありません、それは私がしていることを教えてくれます。

2048
mike628
git branch

あなたのリポジトリのすべてのローカルブランチを表示します。スター付きブランチは現在のブランチです。

自分がいるブランチの名前だけを取得したい場合は、次のようにします。

git branch | grep \* | cut -d ' ' -f2
1530
roberttdev

他のブランチを表示せずに現在のブランチを表示するには、次のようにします。

git rev-parse --abbrev-ref HEAD

参照:

4006
Jistanidiot

完全な参照仕様を表示するgit symbolic-ref HEADもあります。

Git v1.8以降でブランチ名のみを表示するには(Gregがそのことを指摘してくれてありがとう):

$ git symbolic-ref --short HEAD

Git v1.7以降では、次のこともできます。

$ git rev-parse --abbrev-ref HEAD

ブランチにいる場合は、両方とも同じブランチ名を付ける必要があります。頭が離れている場合は答えが異なります。

注:

以前のクライアントでは、これはうまくいくようです。

$ git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"

- Darien 26. 2014年3月

444
Wernight

もう一つの選択肢:

git name-rev --name-only HEAD
126

非常に単純で、私はそれをワンライナー(bash)で手に入れました

git branch | sed -n '/\* /s///p'

(クレジット:限定償還)

そして私がそこにいる間、リモートトラッキングブランチを取得するための1つのライナー(もしあれば)

git rev-parse --symbolic-full-name --abbrev-ref @{u}
89
Olivier Refalo

Linuxでは、コマンドライン(コンソール)をリポジトリディレクトリに入力するだけです。

$ git status

そして、あなたはいくつかのテキストを見るでしょう。

...
On branch master
...

これはあなたが現在masterブランチにいるということです。その時点でファイルを編集していて、それが同じローカルリポジトリ(Gitバージョン管理下にあるファイルを含むローカルディレクトリ)にある場合は、このブランチでファイルを編集しています。

59
Tadeck
git symbolic-ref -q --short HEAD

現在のブランチ名が必要なスクリプトでこれを使用します。 HEADへの現在の短いシンボル参照が表示されます。これが現在のブランチ名になります。

28
Kousha
git branch | grep -e "^*" | cut -d' ' -f 2

ブランチ名のみを表示します

24
ungalcrys

git branchは現在のブランチ名のみを表示します。

Git branchはすべてのブランチを表示し、現在のブランチをアスタリスクで強調表示しますが、たくさんのブランチを扱うときは面倒になりがちです。

現在いる支店のみを表示するには、次のようにします。

git rev-parse --abbrev-ref HEAD
22
Lawrence Paje

Oliver Refaloの と同じ長さのコマンドラインソリューションを見つけ、good ol 'awkを使用します。

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

awkは、「正規表現に一致する行に{}の内容を追加する」と読みます。デフォルトでは空白で区切られたフィールドを想定しているので、2番目のフィールドを表示します。ブランチのある行だけに*があると仮定できる場合は、^を削除できます。ああ、バッシュゴルフ!

21
Silas Barta
#!/bin/bash
function git.branch {
  br=`git branch | grep "*"`
  echo ${br/* /}
}
git.branch
17
Dziamid

現在のブランチの名前を教えてくれる、gitを意識したシェルプロンプトを使わないのはなぜでしょうか。 git statusも役立ちます。


contrib/ヘルパー関数で定義されているように、 git-Prompt.sh__git_ps1からの方法(gitバージョン2.3.0):

  1. まず、進行中の rebase が検出された場合、特別なケースがあります。 Gitは、リベース処理中に名前のないブランチ(切り離されたHEAD)を使用してアトミックにし、元のブランチは他の場所に保存されます。

  2. .git/HEADファイルがシンボリックリンク(古代のGitの歴史からの非常にまれなケース)の場合、それはgit symbolic-ref HEAD 2>/dev/nullを使用します。

  3. そうでなければ、それは.git/HEADファイルを読みます。次のステップはその内容によって異なります。

    • このファイルが存在しない場合は、現在のブランチはありません。これは通常、リポジトリが不足している場合に発生します。

    • それが'ref: '接頭辞で始まっているならば、.git/HEADはsymref(シンボリックリファレンス)であり、そして私たちは普通のブランチにいます。フルネームを取得するにはこのプレフィックスを削除し、現在のブランチのショートネームを取得するにはrefs/heads/を削除します。

      b="${head#ref: }"
      # ...
      b=${b##refs/heads/}
      
    • 'ref: 'で始まっていない場合は、HEAD(匿名ブランチ)が切り離され、直接コミットを指します。現在のコミットを人間が読める形式で書くにはgit describe ...を使います。

それが役立つことを願っています。

15
Jakub Narębski

次のように作業ディレクトリのコマンドにgit bashを使用できます。

git status -b

それはあなたがどのブランチにいるのかを教えてくれるでしょう。

-s

--short短い形式で出力します。

-b --branch短い形式でもブランチと追跡情報を表示します。

--porcelain [=]スクリプト用に解析しやすい形式で出力を行います。これは短い出力と似ていますが、Gitのバージョン間でもユーザー設定に関係なく安定しています。詳細は下記をご覧ください。

Versionパラメータは、形式のバージョンを指定するために使用されます。これはオプションで、デフォルトはオリジナルバージョンのv1フォーマットです。

--long長い形式で出力します。これがデフォルトです。

-v --verbose変更されたファイルの名前に加えて、コミットされるようステージングされているテキストの変更も表示します(すなわち、git diff --cachedの出力のように)。 -vを2回指定すると、まだステージされていない作業ツリー内の変更も表示されます(つまり、git diffの出力のように)。

14
Prateek Gangwal

これら2つのコマンドのいずれかを使用することをお勧めします。

git branch | grep -e "^*" | cut -d' ' -f 2

OR

git status | sed -n 1p | cut -d' ' -f 3

OR(より詳細)

git status -uno -bs| cut -d'#' -f 3 | cut -d . -f 1| sed -e 's/^[ \t]//1'| sed -n 1p

12
jackotonye

Gitステータスのノイズが少ないバージョンでうまくいくでしょう

git status -bsuno

プリントアウト

## branch-name
12
dgolovin

時が経てば、私たちは非常に長いブランチのリストを持つかもしれません。

他の解決策のいくつかは素晴らしいですが、ここに私がしていることがあります(Jacobの答えから単純化された):

git branch | grep \*

今、

git status

動作しますが、 のみ ローカルの変更がある場合

12
karthikr

申し訳ありませんがこれは別のコマンドライン回答ですが、私がこの質問を見つけたときに私が探していたものであり、これらの回答の多くは役に立ちました。私の解決策は次のbashシェル関数です。

get_branch () {
    git rev-parse --abbrev-ref HEAD | grep -v HEAD || \
    git describe --exact-match HEAD 2> /dev/null || \
    git rev-parse HEAD
}

これは常に私に人間が読めるものとgit checkoutへの引数として直接使えるものの両方を与えるはずです。

  • ローカルブランチの場合:feature/HS-0001
  • タグ付きコミット(デタッチ):v3.29.5
  • リモートブランチ上(デタッチ、タグなし):SHA1
  • 他のデタッチされたコミットでは:SHA1
12
dmaestro12

Netbeansで、バージョン管理注釈が有効になっていることを確認します([表示] - > [バージョン管理ラベルの表示])。プロジェクト名の横にブランチ名が表示されます。

http://netbeans.org/bugzilla/show_bug.cgi?id=213582

11
Saroj

現在のブランチ名を表示するgit-cbr current branch )という簡単なスクリプトがあります。

#!/bin/bash

git branch | grep -e "^*"

このスクリプトをカスタムフォルダ(~/.bin)に置きました。フォルダは$PATHにあります。

だから今私がgitリポジトリにいるとき、私は単に現在のブランチ名を表示するためにgit cbrをタイプするだけです。

$ git cbr
* master

これは、gitコマンドが最初の引数を取り、git-arg1という名前のスクリプトを実行しようとするためです。たとえば、git branchgit-branchなどのスクリプトを実行しようとします。

10
Diego Pino

これはどうですか?

{ git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"
10
ShogunPanda

次のシェルコマンドはあなたが現在いるブランチを教えてくれます。

git branch | grep ^\*

ブランチを知りたいときや、Bashを使用しているときに毎回その長いコマンドを入力したくない場合は、そのコマンドに短いエイリアス、たとえばalias cbを付けてください。

alias cb='git branch | grep ^\*'

あなたがブランチマスターにいて、あなたのプロンプトが$であるとき、あなたは以下のように* masterを得るでしょう。

$ cb
* master
9
mrrusof

Gitブランチ名を表示するようにbash出力を恒久的に設定することができます。別のブランチで作業するときはとても便利です。常に$ git statusをタイプする必要はありません。 Githubリポジトリ git-aware-Prompt

端末を開き(ctrl-alt-t)、コマンドを入力してください。

mkdir ~/.bash
cd ~/.bash
git clone git://github.com/jimeh/git-aware-Prompt.git

(Ubuntu用)Sudo nano ~/.bashrcコマンドを使用して.bashrcを編集し、次の行を先頭に追加します。

export GITAWAREPROMPT=~/.bash/git-aware-Prompt
source "${GITAWAREPROMPT}/main.sh"

それからコードを貼り付けます

export PS1="\${debian_chroot:+(\$debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\] \[$txtcyn\]\$git_branch\[$txtred\]\$git_dirty\[$txtrst\]\$ "

同じファイルの最後に、以前にインストールコードを貼り付けました。これはあなたに色付けされた出力を与えるでしょう: enter image description here

8
git status 

ブランチ名も変更と共に与えます。

例えば.

>git status
On branch master // <-- branch name here
.....
7
Satheesh Kumar

最後のブランチ/タグを切り離されたHEAD状態で本当にチェックアウトしたい場合.

git reflog HEAD | grep 'checkout:' | head -1 | rev | cut -d' ' -f1 | rev

更新 あなたがawkを持っていて、怖がっていないのであれば、これはより良いです。

git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}'
7
Ryan

切り離されたヘッドの場合はブランチ名またはSHA1を返します。

git rev-parse --abbrev-ref HEAD | grep -v ^HEAD$ || git rev-parse HEAD

これは@ dmaestro12の答えの短いバージョンで、タグはサポートされていません。

6
user

私はこれが遅れていることを知っていますが、Linux/macでは、端末からあなたは以下を使うことができます。

git status | sed -n 1p

説明:

git status - >作業ツリーの状態を取得する
sed -n 1p - >ステータスボディから最初の行を取得

上記のコマンドに対する応答は次のようになります。

"On branch your_branch_name"
5
skippy

Macを使用してPS1に追加してください。

PS1='\W@\u >`[ -d .git ] && git branch | grep  ^*|cut -d" " -f2`> $ '

上記のコマンドを実行する前に:

enter image description here

そのコマンドを実行した後:

enter image description here

GITリポジトリでなければ、[-d .git]フォルダが存在するかどうかをチェックする.gitのため、エラーを表示しません。

4
Abdennour TOUMI

こちらにあるようにGIT_BRANCH変数を使うこともできます: https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin

Gitプラグインはあなたのスクリプトで使用できるいくつかの環境変数を設定します。

GIT_COMMIT - 現在のSHA

GIT_BRANCH - 現在使用されているブランチの名前、例えば"master"または "Origin/foo"

GIT_PREVIOUS_COMMIT - 同じブランチからの前回のビルドコミットのSHA(最初のビルドインブランチでの現在のSHA)

GIT_URL - リポジトリリモートURL

GIT_URL_N - 複数のリモートがある場合のリポジトリリモートURL。 GIT_URL_1、GIT_URL_2

GIT_AUTHOR_EMAIL - コミッター/作成者のEメール

GIT_COMMITTER_EMAIL - コミッター/作成者のEメール

4
user3405314

Gitのバージョン2.22からは、次のように使えます。

git branch --show-current
4
Max
git branch | grep "*" | sed "s/* //" | awk '{printf $0}' | pbcopy

結果を直接ペーストボードにコピーします。はじめに@ olivier-refaloに感謝します…

2

以前のアイデアを使う。 sha1が40文字であると仮定します。そして参照を追いかける(そう、デバッグ用の印刷行を削除するべきだ:-):

git reflog | awk '
$3 == "checkout:" && (sha == "" || sha == $1 ) {
  from=$(NF - 2)
  to=$NF
  print from, to, length(from) > "/dev/stderr"
  if (length(from) != 40) { print from ; exit; }
  sha=substr(from, 1, 7)
  print sha > "/dev/stderr"
}
'

生の出力を返します。

$ git status
HEAD detached at 147049c
[...]
$ ./gime-branch.sh
a47be8d2167641088b66bf8f5c2bf7d3da0c642c HEAD^ 40
a47be8d
master HEAD^ 6
master
2
cagney

簡単に言うと、~/.bash_profileに次の行を追加してください。

branch_show() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(branch_show)\[\033[00m\] $ "

このようにして、Terminalに現在のブランチ名をつけることができます。

提供:Coderwall.com

1
Shayan Amani

Perlモードと\Kを使用してマッチバッファをリセットする単一のgrep命令でこれを行うことができるので、分岐名だけを取得します。

$ git branch | grep -oP "^\*\s+\K\S+$"
master
0
Joseph Lust

git branch --contains HEAD | tail -1 | xargsを使用してください。これは「detached HEAD」状態にも機能します。

0
glisu

ローカルブランチ名のみを取得します。

git status -b -u no | awk 'NR==1{print $3;}'

リモートブランチ名のみを取得します。

git status -b -u no | awk 'NR==2{print $6;}'

出力から特殊文字を削除する場合はgit status -b -u no | awk 'NR==2{print $6;}' | tr -d "[.']"

0
v.babak

私はこれがすでに答えられていることを知っています、しかしGitの最新版ではコマンドgit branchはあなたがやめなければならないある種のプロンプトであなたの枝のリストを開きます。これは私を終わりに迷惑させます!

これが私の解決策です:あなたのbashプロファイルを開いて、これを入力してください:

#!/bin/bash
git() {
  if [[ $@ == "branch" ]] then
    command git branch -a | grep -v 'remotes'
  else
    command git "$@"
  fi
}

それではTerminalを開いて、gitリポジトリに以下のコマンドを入力して試してみてください。

source ~/.zshrc
git branch 

そして、やあ!あなたの地元の支店のリストがあなたの端末に印刷されています。

あなたのbashrcファイルに書いているコードはgit branchのデフォルト関数を上書きし、それを-a引数ですべてのローカルブランチをリストするもっと長いコマンドに置き換えます。それから私達は余分な不要なビジネスをgrepしてプリントアウトします。 grepコマンドを除外しても、迷惑なプロンプトが表示されます。 bashコマンドの作成に慣れていない場合は、次の説明を参照してください。 .bash_profile、.bashrc、およびaliasの記述場所について

0
okTalk