wake-up-neo.net

Gibt es einen besseren Weg, um herauszufinden, ob ein lokaler Git-Zweig existiert?

Ich verwende den folgenden Befehl, um herauszufinden, ob ein local git-Zweig mit branch-name in meinem Repository vorhanden ist. Ist das richtig? Gibt es einen besseren Weg?

Bitte beachten Sie, dass ich dies in einem Skript mache. Aus diesem Grund möchte ich möglichst auf Porzellanbefehle verzichten. 

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

Update

Es stellt sich heraus, es gibt einen anderen Weg . Danke @jhuynh

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

Soweit ich weiß, ist das der beste Weg, dies in einem Skript zu tun. Ich bin nicht sicher, ob es noch viel mehr hinzuzufügen gibt, aber es könnte genauso gut eine Antwort geben, die nur sagt "Dieser Befehl erfüllt alles, was Sie wollen" :)

Das Einzige, worauf Sie achten sollten, ist, dass Zweignamen überraschende Zeichen enthalten können, so dass Sie <branch-name> zitieren möchten.

43
Mark Longair

Wenn ich in einer Suchmaschine nach 'git check if branch' suche, ist diese Seite die erste, die ich sehe.

Ich bekomme was ich will, aber ich würde gerne eine aktualisierte Antwort geben, da der ursprüngliche Beitrag aus 2011 stammt.

git rev-parse --verify <branch_name>

Dies ist im Wesentlichen das gleiche wie die akzeptierte Antwort, aber Sie brauchen nicht "refs/heads /" einzugeben.

89
jhuynh

Fast dort.

Lassen Sie einfach --verify und --quiet weg und Sie erhalten entweder den Hash, falls der Zweig existiert, oder nichts, wenn dies nicht der Fall ist.

Weisen Sie es einer Variablen zu und suchen Sie nach einer leeren Zeichenfolge.

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

Ich denke, Sie können hier git show-branch verwenden.

$ 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

Also, $? == 0 würde bedeuten, dass der Zweig existiert und Sie müssen sich nicht in die Rohrleitungen von Refs/Heads/einarbeiten. Solange Sie -r nicht an show-branch übergeben, können nur lokale Zweigstellen verwendet werden.

15
Mark Drago

Ich empfehle git show-ref --quiet refs/heads/$name.

  • --quiet bedeutet, dass keine Ausgabe erfolgt. Dies ist gut, da Sie den Exit-Status sauber prüfen können.

  • refs/heads/$name beschränkt sich auf lokale Zweigstellen und stimmt mit vollständigen Namen überein (ansonsten würde dev mit develop übereinstimmen)

Verwendung in einem Skript:

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

Unter Windows Batch-Skript ist es etwas anders,

git rev-parse --verify <branch>

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

Zur Verwendung in einem Skript:

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

Dies beendet 0 nur dann, wenn <branch-name> als lokaler Zweig vorhanden ist.

Beispiel:

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

Das Ergebnis der Überprüfung meiner 'Änderungsvorschläge' für das 'Update' bei der ersten Frage war 'Es sollte als Kommentar oder Antwort geschrieben worden sein', also poste ich es hier:

Das vorgeschlagene eine andere Möglichkeit überprüft nicht nur Zweige, sondern auch Verweise mit diesem Namen @ jhuynh .

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

Problem mit einem 'Update' bei der ersten Frage erklärt:

Nehmen wir an und überprüfen wir, dass 'master.000' nur ein Tag ist, ein solcher lokaler Zweig existiert nicht, grep gibt einen Eintrag zurück, der ein Tag ist. Trotzdem gibt rev-parse 0 zurück, wenn eine Referenz vorhanden ist, auch wenn ein solcher lokaler Zweig nicht vorhanden ist. Dies ist eine falsche Übereinstimmung, genau wie von @ paul-s erwähnt

$ git show-ref |grep master.000

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

Nennen wir es git is_localbranch (Sie müssen Alias ​​in .gitconfig hinzufügen).

Verwendungszweck:

$ git is_localbranch BRANCH

Quelle:

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

ja, da ist einer. git rev-parse []… https://git-scm.com/docs/git-rev-parse Hier finden Sie die Argumente und die Funktion.

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

Weder git show-ref noch git rev-parse funktionieren in meinem Fall.

$ 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

Ich endete damit

$ 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

Sie können auch mit einer Skriptdatei arbeiten

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

Ich wollte es als Browser verwenden, also habe ich eine kleine App erstellt, mit der Sie die Gültigkeit Ihres Zweignamens überprüfen können. Es wird von Git unterstützt, so dass Sie wissen, was Sie bekommen.

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

0
obfk