私はSubversionのバックグラウンドから来ました、そして私がブランチを持っていたとき、私は「これらの作業ファイルはこのブランチを指しています」で取り組んでいたことを知っていました。
しかし、Gitでは、NetBeansまたはNotepad ++でファイルを編集しているとき、それがマスターまたは他のブランチに関連しているかどうかはわかりません。
Bashのgit
に問題はありません、それは私がしていることを教えてくれます。
git branch
あなたのリポジトリのすべてのローカルブランチを表示します。スター付きブランチは現在のブランチです。
自分がいるブランチの名前だけを取得したい場合は、次のようにします。
git branch | grep \* | cut -d ' ' -f2
完全な参照仕様を表示する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月
もう一つの選択肢:
git name-rev --name-only HEAD
非常に単純で、私はそれをワンライナー(bash)で手に入れました
git branch | sed -n '/\* /s///p'
(クレジット:限定償還)
そして私がそこにいる間、リモートトラッキングブランチを取得するための1つのライナー(もしあれば)
git rev-parse --symbolic-full-name --abbrev-ref @{u}
Linuxでは、コマンドライン(コンソール)をリポジトリディレクトリに入力するだけです。
$ git status
そして、あなたはいくつかのテキストを見るでしょう。
...
On branch master
...
これはあなたが現在master
ブランチにいるということです。その時点でファイルを編集していて、それが同じローカルリポジトリ(Gitバージョン管理下にあるファイルを含むローカルディレクトリ)にある場合は、このブランチでファイルを編集しています。
git symbolic-ref -q --short HEAD
現在のブランチ名が必要なスクリプトでこれを使用します。 HEADへの現在の短いシンボル参照が表示されます。これが現在のブランチ名になります。
git branch | grep -e "^*" | cut -d' ' -f 2
ブランチ名のみを表示します
git branch
は現在のブランチ名のみを表示します。
Git branchはすべてのブランチを表示し、現在のブランチをアスタリスクで強調表示しますが、たくさんのブランチを扱うときは面倒になりがちです。
現在いる支店のみを表示するには、次のようにします。
git rev-parse --abbrev-ref HEAD
Oliver Refaloの と同じ長さのコマンドラインソリューションを見つけ、good ol 'awkを使用します。
git branch | awk '/^\*/{print $2}'
awk
は、「正規表現に一致する行に{}
の内容を追加する」と読みます。デフォルトでは空白で区切られたフィールドを想定しているので、2番目のフィールドを表示します。ブランチのある行だけに*があると仮定できる場合は、^を削除できます。ああ、バッシュゴルフ!
#!/bin/bash
function git.branch {
br=`git branch | grep "*"`
echo ${br/* /}
}
git.branch
現在のブランチの名前を教えてくれる、gitを意識したシェルプロンプトを使わないのはなぜでしょうか。 git status
も役立ちます。
contrib/
ヘルパー関数で定義されているように、 git-Prompt.sh__git_ps1
からの方法(gitバージョン2.3.0):
まず、進行中の rebase が検出された場合、特別なケースがあります。 Gitは、リベース処理中に名前のないブランチ(切り離されたHEAD)を使用してアトミックにし、元のブランチは他の場所に保存されます。
.git/HEAD
ファイルがシンボリックリンク(古代のGitの歴史からの非常にまれなケース)の場合、それはgit symbolic-ref HEAD 2>/dev/null
を使用します。
そうでなければ、それは.git/HEAD
ファイルを読みます。次のステップはその内容によって異なります。
このファイルが存在しない場合は、現在のブランチはありません。これは通常、リポジトリが不足している場合に発生します。
それが'ref: '
接頭辞で始まっているならば、.git/HEAD
はsymref(シンボリックリファレンス)であり、そして私たちは普通のブランチにいます。フルネームを取得するにはこのプレフィックスを削除し、現在のブランチのショートネームを取得するにはrefs/heads/
を削除します。
b="${head#ref: }"
# ...
b=${b##refs/heads/}
'ref: '
で始まっていない場合は、HEAD(匿名ブランチ)が切り離され、直接コミットを指します。現在のコミットを人間が読める形式で書くにはgit describe ...
を使います。
それが役立つことを願っています。
次のように作業ディレクトリのコマンドにgit bashを使用できます。
git status -b
それはあなたがどのブランチにいるのかを教えてくれるでしょう。
-s
--short短い形式で出力します。
-b --branch短い形式でもブランチと追跡情報を表示します。
--porcelain [=]スクリプト用に解析しやすい形式で出力を行います。これは短い出力と似ていますが、Gitのバージョン間でもユーザー設定に関係なく安定しています。詳細は下記をご覧ください。
Versionパラメータは、形式のバージョンを指定するために使用されます。これはオプションで、デフォルトはオリジナルバージョンのv1フォーマットです。
--long長い形式で出力します。これがデフォルトです。
-v --verbose変更されたファイルの名前に加えて、コミットされるようステージングされているテキストの変更も表示します(すなわち、git diff --cachedの出力のように)。 -vを2回指定すると、まだステージされていない作業ツリー内の変更も表示されます(つまり、git diffの出力のように)。
これら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
Gitステータスのノイズが少ないバージョンでうまくいくでしょう
git status -bsuno
プリントアウト
## branch-name
時が経てば、私たちは非常に長いブランチのリストを持つかもしれません。
他の解決策のいくつかは素晴らしいですが、ここに私がしていることがあります(Jacobの答えから単純化された):
git branch | grep \*
今、
git status
動作しますが、 のみ ローカルの変更がある場合
申し訳ありませんがこれは別のコマンドライン回答ですが、私がこの質問を見つけたときに私が探していたものであり、これらの回答の多くは役に立ちました。私の解決策は次の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
Netbeansで、バージョン管理注釈が有効になっていることを確認します([表示] - > [バージョン管理ラベルの表示])。プロジェクト名の横にブランチ名が表示されます。
現在のブランチ名を表示するgit-cbr
( current branch )という簡単なスクリプトがあります。
#!/bin/bash
git branch | grep -e "^*"
このスクリプトをカスタムフォルダ(~/.bin
)に置きました。フォルダは$PATH
にあります。
だから今私がgitリポジトリにいるとき、私は単に現在のブランチ名を表示するためにgit cbr
をタイプするだけです。
$ git cbr
* master
これは、git
コマンドが最初の引数を取り、git-arg1
という名前のスクリプトを実行しようとするためです。たとえば、git branch
はgit-branch
などのスクリプトを実行しようとします。
これはどうですか?
{ git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"
次のシェルコマンドはあなたが現在いるブランチを教えてくれます。
git branch | grep ^\*
ブランチを知りたいときや、Bashを使用しているときに毎回その長いコマンドを入力したくない場合は、そのコマンドに短いエイリアス、たとえばalias cb
を付けてください。
alias cb='git branch | grep ^\*'
あなたがブランチマスターにいて、あなたのプロンプトが$
であるとき、あなたは以下のように* master
を得るでしょう。
$ cb
* master
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\]\$ "
git status
ブランチ名も変更と共に与えます。
例えば.
>git status
On branch master // <-- branch name here
.....
最後のブランチ/タグを切り離されたHEAD状態で本当にチェックアウトしたい場合.
git reflog HEAD | grep 'checkout:' | head -1 | rev | cut -d' ' -f1 | rev
更新 あなたがawkを持っていて、怖がっていないのであれば、これはより良いです。
git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}'
切り離されたヘッドの場合はブランチ名またはSHA1を返します。
git rev-parse --abbrev-ref HEAD | grep -v ^HEAD$ || git rev-parse HEAD
これは@ dmaestro12の答えの短いバージョンで、タグはサポートされていません。
私はこれが遅れていることを知っていますが、Linux/macでは、端末からあなたは以下を使うことができます。
git status | sed -n 1p
説明:
git status - >作業ツリーの状態を取得する
sed -n 1p - >ステータスボディから最初の行を取得
上記のコマンドに対する応答は次のようになります。
"On branch your_branch_name"
こちらにあるように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メール
Gitのバージョン2.22からは、次のように使えます。
git branch --show-current
git branch | grep "*" | sed "s/* //" | awk '{printf $0}' | pbcopy
結果を直接ペーストボードにコピーします。はじめに@ olivier-refaloに感謝します…
以前のアイデアを使う。 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
簡単に言うと、~/.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
Perlモードと\K
を使用してマッチバッファをリセットする単一のgrep命令でこれを行うことができるので、分岐名だけを取得します。
$ git branch | grep -oP "^\*\s+\K\S+$"
master
git branch --contains HEAD | tail -1 | xargs
を使用してください。これは「detached HEAD」状態にも機能します。
ローカルブランチ名のみを取得します。
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 "[.']"
私はこれがすでに答えられていることを知っています、しかし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の記述場所について