私はSubversionの出身ですが、ブランチがあるときは、「これらの作業ファイルがこのブランチをポイントしている」ので、自分が何をしているのかわかっていました。
しかし、Gitでは、NetBeansやNotepad ++でファイルを編集しているとき、マスターと別のブランチのどちらに関連付けられているかはわかりません。
git
bashには何の問題もありません。それは私が何をしているかを教えてくれます。
私はSubversionの出身ですが、ブランチがあるときは、「これらの作業ファイルがこのブランチをポイントしている」ので、自分が何をしているのかわかっていました。
しかし、Gitでは、NetBeansやNotepad ++でファイルを編集しているとき、マスターと別のブランチのどちらに関連付けられているかはわかりません。
git
bashには何の問題もありません。それは私が何をしているかを教えてくれます。
回答:
git branch
リポジトリのすべてのローカルブランチを表示する必要があります。スター付きブランチが現在のブランチです。
現在のブランチの名前のみを取得したい場合は、次のようにすることができます。
git rev-parse --abbrev-ref HEAD
git checkout --orphan foo
、その後git branch
の分岐を示すことができませんでしたfoo
。git symbolic-ref HEAD
提案されたように別の答えが働いたのに対し。
表示されている他のブランチなしで現在のブランチを表示するには、次のようにします。
git rev-parse --abbrev-ref HEAD
参照:
git branch
ショー* (no branch)
も役に立たない、...
git rev-parse --abbrev-ref HEAD 2>/dev/null
/ dev / nullの部分は、まだHEADになっていない新しいリポジトリを作成した場合にエラーが表示されるのを防ぎます。
git symbolic-ref HEAD
完全なrefspecを表示するものもあります。
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\///"
– ダリエン26. 2014年3月
git rev-parse --abbrev-ref HEAD
を使用HEAD
すると、分離した頭の上にいるときに表示されます。
git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"
同様HEAD detached at a63917f
に文字列が表示されるため、最良の回答はまだです。これは重要。
私自身の参照のため(ただし、他の人にとっては役立つかもしれません)、このスレッドで言及されているほとんどの(基本的なコマンドライン)テクニックの概要を作成しました。それぞれ、いくつかのユースケースに適用されます。
結果:
git branch | sed -n '/\* /s///p'
master
(detached from origin/master)
(detached from origin/feature-foo)
(detached from v1.2.3)
(HEAD detached at 285f294)
(detached from 285f294)
git status | head -1
# On branch master
# HEAD detached at origin/master
# HEAD detached at origin/feature-foo
# HEAD detached at v1.2.3
# HEAD detached at 285f294
# HEAD detached at 285f294
git describe --all
heads/master
heads/master
注:ない remotes/origin/master
)remotes/origin/feature-foo
v1.2.3
remotes/origin/HEAD
v1.0.6-5-g2393761
cat .git/HEAD
:
ref: refs/heads/master
cat: .git/HEAD: Not a directory
git rev-parse --abbrev-ref HEAD
master
HEAD
git symbolic-ref --short HEAD
master
fatal: ref HEAD is not a symbolic ref
(これはgitバージョン1.8.3.1で行われました)
git describe --all --exact-match 2>/dev/null | sed 's=.*/=='
最良の解決策でした(タグとブランチヘッドの適切な名前、ランダムに分離されたヘッドの出力なし)
git describe
同じコミットを参照する複数のブランチがある場合、使用直後に重大な障害が発生することを発見しました。たとえば、直後にgit checkout -b foo
-それらの1つを任意に使用します(おそらく最近作成されたもののようです)。フィルター処理された出力を使用するように戦略を変更し、結果が分離したヘッドに関するものである場合にgit branch
のみ使用しますgit describe
。
git branch --no-color
は、ファイル名に煩わしい端末エスケープコードがないことを確認するために使用する必要があります。
gitのバージョン2.22以降では、次のように使用できます。
git branch --show-current
manページによると:
現在のブランチの名前を出力します。切り離されたHEAD状態では、何も出力されません。
もう1つの選択肢:
git name-rev --name-only HEAD
echo ${$(git symbolic-ref --quiet HEAD)#refs/heads/}
git checkout master && git name-rev --name-only HEAD # ac-187
期待どおりに機能しない
git branch --list
ちょうど言います* (HEAD detached at 7127db5)
。行うgit rev-parse --abbrev-ref HEAD
だけで言うHEAD
と、上のようにします。
Linuxでは、リポジトリー・ディレクトリーにコマンド行(コンソール)を入力するだけです。
$ git status
そしていくつかのテキストが表示されます。
...
On branch master
...
これは、現在master
ブランチにいることを意味します。その時点でファイルを編集していて、同じローカルリポジトリ(Gitバージョン管理下にあるファイルを含むローカルディレクトリ)にある場合、このブランチでファイルを編集しています。
git status
出力の最初の行のみを使用して取得できます。バージョンの違いも考慮する必要があると確信しています。git status | head -1
# On branch master
git status | grep 'On branch'
、これは同じ効果をもたらすはずです(Gitのバージョンによって表示が異なる場合にそうなるとは限りません)。またはgit branch | grep '*'
、これは、枝の先頭に星が付いた枝の名前を示します。
<tick>git status | head -1<tick>.gsub('# On branch ', '')
git status
管理されているファイルが多い場合、値を返すのに長い時間がかかることがあります。
git status
全体の生成時間が長くなる可能性があります。
git symbolic-ref -q --short HEAD
現在のブランチ名が必要なスクリプトでこれを使用しています。現在のブランチ名となるHEADへの現在の短いシンボリック参照が表示されます。
git branch
現在のブランチ名のみを表示します。
gitブランチではすべてのブランチが表示され、現在のブランチがアスタリスクで強調表示されますが、多数のブランチを処理する場合は扱いにくい場合があります。
現在使用しているブランチのみを表示するには、次を使用します。
git rev-parse --abbrev-ref HEAD
git branch --contains
は、複数のブランチをリストすることがあります。
good ol 'awkを使用して、Oliver Refaloと同じ長さのコマンドラインソリューションを見つけました。
git branch | awk '/^\*/{print $2}'
awk
それを「{}
正規表現に一致する行に入力する」と読みます。デフォルトでは、空白で区切られたフィールドを想定しているため、2番目を印刷します。ブランチのある行にのみ*があると想定できる場合は、^をドロップできます。ああ、バッシュゴルフ!
現在のブランチの名前を伝えるgit-awareシェルプロンプトを使用しないのはなぜですか? git status
また役立ちます。
どのようにgit-prompt.shからcontrib/
で定義されて、(gitのバージョン2.3.0)それをしない__git_ps1
ヘルパー関数:
まず、進行中のリベースが検出された場合、特別なケースがあります。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 describe --contains --all HEAD
このページの他の場所では現在見られないことのようです。ご存知のとおり、StackOverflowではリンクのみの回答は推奨されていません。
git-prompt.sh
(別名__git_ps1
)がどのようにそれを行うかについての説明を追加しました...
git statusのノイズの少ないバージョンでうまくいくでしょう
git status -bsuno
プリントアウト
## branch-name
申し訳ありませんが、これは別のコマンドラインの回答ですが、この質問を見つけたときに私が探していたものであり、これらの回答の多くは役に立ちました。私の解決策は次の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
git checkout
です。
作業ディレクトリコマンドでgit bashを使用できます。
git status -b
それはあなたがどのブランチにいるのかを教えてくれます
-s
--short出力を短い形式で提供します。
-b --branch短い形式でもブランチと追跡情報を表示します。
--porcelain [=]スクリプトの解析しやすい形式で出力を提供します。これは短い出力に似ていますが、ユーザー設定に関係なく、Gitバージョン全体で安定しています。詳細については、以下を参照してください。
versionパラメータは、フォーマットバージョンを指定するために使用されます。これはオプションであり、デフォルトで元のバージョンv1形式になります。
--long出力をロングフォーマットで提供します。これがデフォルトです。
-v --verbose変更されたファイルの名前に加えて、コミットされるようにステージングされたテキストの変更も表示します(つまり、git diff --cachedの出力のように)。-vが2回指定されている場合、まだステージングされていない(つまり、git diffの出力のような)作業ツリーの変更も表示します。
git status
変更に伴ってブランチ名も表示されます。
例えば
>git status
On branch master // <-- branch name here
.....
Netbeansで、バージョニングアノテーションが有効になっていることを確認します([表示]-> [バージョニングラベルの表示])。プロジェクト名の横にブランチ名が表示されます。
これはどうですか?
{ git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"
symbolic-ref
パーツ--short
はブランチ名の前にプレフィックスを付けることを避ける必要もないのrefs/heads/
ですか?
現在のブランチ名を出力する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-branch名を表示するようにbash出力を永続的に設定できます。さまざまなブランチで作業するときに非常に便利です$ git status
。常にタイプする必要はありません。Githubリポジトリgit-aware-prompt
。
端末を開き(ctrl-alt-t)、コマンドを入力します
mkdir ~/.bash
cd ~/.bash
git clone git://github.com/jimeh/git-aware-prompt.git
sudo nano ~/.bashrc
コマンド(Ubuntuの場合)で.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 branch | grep ^\*
ブランチを知りたいときに毎回その長いコマンドを入力したくない場合で、Bashを使用している場合は、コマンドにエイリアスなどの短いエイリアスを指定しcb
ます。
alias cb='git branch | grep ^\*'
ブランチマスターでプロンプトがの$
場合* master
、次のようになります。
$ cb
* master
git branch | grep '^\*'
最後のブランチ/タグをデタッチされたHEAD状態でもチェックアウトしたい場合。
git reflog HEAD | grep 'checkout:' | head -1 | rev | cut -d' ' -f1 | rev
更新 これはawkが怖いのではない方に適しています。
git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}'
rev | cut -d' ' -f1| rev
は、次のように簡略化できますawk '{print $NF}'
checkout: moving from ba7571b7fc5b8f31b8d0625821269afaa655577e to f68be8cf7bea917a5a0562b619e50368de0068a9
いくつかのケースを明確にするのに役立つ便利なトリックであることを示しています。
git reflog | awk '$3=="checkout:" {print $NF; exit}'
ここに表示される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-コミッター/著者のメール
GIT_COMMITTER_EMAIL-コミッター/著者のメール
.git/HEAD
、おそらく親ディレクトリに表示させます