web-dev-qa-db-ja.com

ローカルgitブランチが存在するかどうかを確認するより良い方法はありますか?

次のコマンドを使用して、リポジトリにbranch-namelocalgitブランチが存在するかどうかを確認しています。これは正しいです?もっと良い方法はありますか?

スクリプト内でこれを行っていることに注意してください。このため、可能であれば 配管コマンドを使用 にしたいと思います。

git show-ref --verify --quiet refs/heads/<branch-name>
# $? == 0 means local branch with <branch-name> exists. 
162
Manoj Govindan

私の知る限り、それがスクリプトでそれを行う最良の方法です。それにさらに追加するものがあるかどうかはわかりませんが、「そのコマンドはあなたが望むすべてをする」という答えが1つあるかもしれません:)

注意が必要な唯一のことは、ブランチ名に驚くような文字が含まれている可能性があるため、<branch-name>を引用することです。

46
Mark Longair

検索エンジンで「ブランチが存在するかどうかgit check」を検索すると、このページが最初に表示されます。

私は欲しいものを手に入れましたが、元の投稿は2011年からだったので、更新された回答を提供したいと思います。

git rev-parse --verify <branch_name>

これは基本的に受け入れられた答えと同じですが、「refs/heads /」と入力する必要はありません

97
jhuynh

ほぼそこに。

--verify--quietを省略すると、ブランチが存在する場合はハッシュを取得し、存在しない場合は何も取得しません。

それを変数に割り当て、空の文字列を確認します。

exists=`git show-ref refs/heads/<branch-name>`
if [ -n "$exists" ]; then
    echo 'branch exists!'
fi
30
Martijn

ここでgit show-branchを使用できると思います。

$ git show-branch --list
  [master] test
* [testbranch] test
$ git show-branch testbranch
[testbranch] test
$ echo $?
0
$ git show-branch nonexistantbranch
fatal: bad sha1 reference nonexistantbranch
$ echo $?
128

だから、$? == 0はブランチが存在することを示し、refs/heads /の配管を掘り下げる必要はまったくありません。 -rをshow-branchに渡さない限り、ローカルブランチでのみ動作します。

15
Mark Drago

git show-ref --quiet refs/heads/$nameをお勧めします。

  • --quietは、出力がないことを意味します。これは、終了ステータスをきれいにチェックできるので良いことです。

  • refs/heads/$nameはローカルブランチに制限され、フルネームに一致します(そうでない場合はdevdevelopに一致します)

スクリプトでの使用:

if git show-ref --quiet refs/heads/develop; then
    echo develop branch exists
fi
12
Razzi Abuissa

スクリプトで使用する場合:

git show-ref -q --heads <branch-name>

これは、0がローカルブランチとして存在する場合にのみ、<branch-name>を終了します。

例:

if git show-ref -q --heads <branch-name>; then
   echo 'Branch exists'
fi
5
Tom Hale

Windowsバッチスクリプトでは少し異なりますが、

git rev-parse --verify <branch>

if %ERRORLEVEL% == 0  (
    echo "Yes"
) else (
    echo "No"
)
2
pinkal vansia

最初の質問の「更新」に対する「提案された編集」のレビューの結果は「コメントまたは回答として書かれるべきだった」でしたので、ここに投稿しています:

別の方法 を提案すると、ブランチだけでなく、そのような名前の参照も検証されます @ jhuynh

git rev-parse --verify <reference-name>
# $? == 0 means reference with <reference-name> exists.

最初の静止に関する「更新」の問題の説明:

'master.000'がタグにすぎないことを想定して確認します。このようなローカルブランチは存在せず、grepは1つのエントリを返します。これはタグです。そのようなローカルブランチが存在しない場合でも、参照が存在する場合、rev-parseは0を返します。 @ paul-s で述べられているとおり、これは誤った一致です

$ git show-ref |grep master.000

f0686b8c16401be87e72f9466083d29295b86f4a refs/tags/master.000
$ git rev-parse --verify master.000
f0686b8c16401be87e72f9466083d29295b86f4a
$ echo $?
0
1
Pshemy108

git is_localbranchと呼びましょう(.gitconfigにエイリアスを追加する必要があります)。

使用法:

$ git is_localbranch BRANCH

ソース:

git branch | grep -w $1 > /dev/null
if [ $? = 0 ]
then
  echo "branch exists"
fi
1
Zlatan

うんgit rev-parse []… https://git-scm.com/docs/git-rev-parse uは引数と関数のセットを見つけることができます。

        git rev-parse --verify <branch-name>
0
user11061050

私の場合、git show-refgit rev-parseも機能しません。

$ git --version
git version 2.21.0

$ git show-branch --list
* [master] mybranch commit

$ BRANCH_NAME=mybranch
$ git rev-parse --verify $BRANCH_NAME
fatal: Needed a single revision

$ git show-ref refs/heads/$BRANCH_NAME
<no otput>
$ [ $? == 0 ] && echo "$BRANCH_NAME exists" || echo "$BRANCH_NAME not exists"
mybranch not exists

私はこれで終わった

$ BRANCH_NAME=mybranch
$ SHOW_ALL=`git show-branch --all | grep -w $BRANCH_NAME`
$ [ $? == 0 ] && echo "$BRANCH_NAME exists" || echo "$BRANCH_NAME not exists"
mybranch exists

スクリプトファイルでもできます

#!/bin/sh
BRANCH_NAME=mybranch
if grep -Fqe $BRANCH_NAME << EOF
`git show-branch --all`
EOF
then
   echo "$BRANCH_NAME exists"
else
   echo "$BRANCH_NAME not exists"
fi
0
Chetabahana

ブラウザで使用したかったので、ブランチ名の有効性を確認できる小さなアプリを作成しました。 gitによってサポートされているため、何を取得しているのかがわかります。

https://branch-checker.herokuapp.com/validate?branch=not//valid

0
obfk