web-dev-qa-db-fra.com

Existe-t-il un meilleur moyen de savoir s’il existe une branche git locale?

J'utilise la commande suivante pour savoir si une branche locale git avec branch-name existe dans mon référentiel. Est-ce correct? Y a-t-il un meilleur moyen?

Veuillez noter que je le fais dans un script. Pour cette raison, j'aimerais si possible rester à l'écart des commandes de porcelaine. 

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

Mettre à jour

Il s'avère qu'il y a une autre façon . Merci @jhuynh

git rev-parse --verify <branch-name>
# $? == 0 means local branch with name <branch-name> exists.
151
Manoj Govindan

Autant que je sache, c'est la meilleure façon de le faire dans un script. Je ne suis pas sûr qu'il y ait beaucoup plus à ajouter à cela, mais il pourrait aussi bien y avoir une réponse qui dit simplement "Cette commande fait tout ce que vous voulez" :)

La seule chose à laquelle vous devez faire attention, c'est que les noms de branches peuvent contenir des caractères surprenants, vous pouvez donc citer <branch-name>.

43
Mark Longair

Lorsque je recherche 'git check if branch exist' sur un moteur de recherche, cette page est la première que je vois.

Je reçois ce que je veux, mais je voudrais fournir une réponse mise à jour puisque le message original était de 2011.

git rev-parse --verify <branch_name>

C'est essentiellement la même chose que la réponse acceptée, mais vous n'avez pas besoin de taper "refs/heads /"

89
jhuynh

Presque là.

Laissez simplement --verify et --quiet et vous obtenez soit le hachage si la branche existe, soit rien sinon.

Attribuez-le à une variable et recherchez une chaîne vide.

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

Je pense que vous pouvez utiliser git show-branch ici.

$ 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

Alors, $? == 0 indique que la branche existe et que vous n'avez pas à creuser dans la plomberie des références/têtes/du tout. Tant que vous ne transmettez pas -r à show-branch, cela ne fonctionnera que sur les branches locales.

15
Mark Drago

Je recommande git show-ref --quiet refs/heads/$name.

  • --quiet signifie qu'il n'y a pas de sortie, ce qui est bien, car vous pouvez alors vérifier proprement le statut de sortie.

  • refs/heads/$name limite les branches locales et correspond aux noms complets (sinon dev correspondrait à develop)

Utilisation dans un script:

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

Sur le script batch Windows, c'est un peu différent,

git rev-parse --verify <branch>

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

Pour une utilisation dans un script:

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

Ceci quittera 0 si et seulement si <branch-name> existe en tant que branche locale.

Exemple:

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

Appelons-le git is_localbranch (vous devez ajouter un alias dans .gitconfig).

Usage:

$ git is_localbranch BRANCH

La source:

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

Le résultat de la révision de mon "Édition suggérée" à la "Mise à jour" de la question initiale était "Il aurait dû être écrit sous forme de commentaire ou de réponse", je le poste ici:

Le d’une autre manière proposé ne vérifiera pas seulement les branches mais toute référence portant ce nom @jhuynh

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

Problème avec une «mise à jour» sur la question initiale expliquée:

Supposons et vérifions que 'master.000' n'est qu'une balise, une telle branche locale n'existe pas, grep renvoie une entrée qui est une balise. Encore rev-parse retournera 0 si la référence existe, même si une telle branche locale n'existe pas. Ceci est une fausse correspondance, exactement comme mentionné par @ paul-s

$ git show-ref |grep master.000

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

oui il y en a un. git rev-parse []… https://git-scm.com/docs/git-rev-parse Où vous pouvez trouver l'ensemble des arguments et la fonction.

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

Ni git show-ref ni git rev-parse ne fonctionnent sur mon cas.

$ 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

J'ai fini avec ça

$ 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

Vous pouvez aussi faire avec un fichier script

#!/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

Je voulais utiliser le navigateur, alors j'ai créé une petite application qui vous permet de vérifier la validité de votre nom de branche. Il est soutenu par un git, vous savez donc ce que vous obtenez.

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

0
obfk