1. ホーム
  2. ギット

[解決済み】現在チェックアウトされているGitブランチをプログラムで決定する方法【重複あり

2022-03-29 13:22:27

質問

Unix や GNU スクリプト環境(Linux ディストロ、Cygwin、OSX など)で、ある作業ディレクトリで現在チェックアウトされている Git ブランチを判断する最善の方法は何でしょうか。

このテクニックの用途の1つは、リリースに自動的にラベルを付けることです(例えば svnversion は、Subversionで行うことができます)。

関連する私の質問もご覧ください。 Git のチェックアウトがタグであるかどうか、またタグである場合にはその名前は何なのかをプログラムで判断するには?

どのように解決するのですか?

を覗いてみるのが正解です。 contrib/completions/git-completion.bash。 でのbashプロンプトに対して行うものです。 __git_ps1 . デタッチドHEADの状況、つまりunnamedブランチにいるときの記述方法を選択するなど、余分なものはすべて削除しています。

branch_name="$(git symbolic-ref HEAD 2>/dev/null)" ||
branch_name="(unnamed branch)"     # detached HEAD

branch_name=${branch_name##refs/heads/}

git symbolic-ref は、シンボリック参照から完全修飾されたブランチ名を抽出するために使用します。これは、現在チェックアウトされているブランチである HEAD に対して使用します。

別の解決策が考えられます。

branch_name=$(git symbolic-ref -q HEAD)
branch_name=${branch_name##refs/heads/}
branch_name=${branch_name:-HEAD}

ここで、最後の行では、切り離されたHEADの状況を扱っており、そのような状況を表すために単に "HEAD" を使用しています。


2013年11月6日追記

Junio C. Hamano (git maintainer) のブログ記事。 プログラムによる現在のブランチのチェック 2013年6月10日の記事で説明されています。 なぜ (そして、どのように)詳しく説明します。