現在のブランチ名を文字列として取り出す方法いろいろ。
正直よく理解していない部分も多いので、間違いなどあればご指摘いただけると嬉しいです。
git-symbolic-refを使う
branch名の取得なら、多分これが一番良い? HEAD
を指定することで現在のワーキングツリーがどのブランチかを得ることができる。
zshのVCS_INFO_git_getbranch
でもこれが使われている模様。
$ git symbolic-ref --short HEAD
--short
オプションはv1.7.10以降から?
https://github.com/git/git/blob/master/Documentation/RelNotes/1.7.10.txt#L125
git-name-rev, git-describeを使う
git-name-rev
は指定したrevに対するsymbolic name(?)を返すので、HEAD
を指定することで現在の最新コミットに関連するbranch名やtag名を得ることができる。
$ git name-rev --name-only HEAD
git-describe
は指定したrevに最も近いtagなどを取得することができるようで、--all
オプションを指定すればbranch名も対象になり、取得することができる。
$ git describe --all
どちらもbranch名だけでなくtag名も対象になるので純粋にbranch名だけを取り出したい場合はさらにフィルタリングが必要になるかも。
git-branchの出力を加工する
git branch -a
ですべてのブランチが表示され、current branchには行先頭に"*"がつくのでその行からブランチ名を取り出して使うことができる。
$ git branch -a | grep -E '^\*' | cut -b 3-
$ git branch -a | grep -E '^\*' | sed -e 's/^\* //'
git-statusの出力を加工する
git status --short --branch --untracked-files=no
でもcurrent branch名が取れるのでそれを加工することでも取得できる。
$ git status -sbu no | cut -b 4-