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.
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.
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.
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
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.
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
Unter Windows Batch-Skript ist es etwas anders,
git rev-parse --verify <branch>
if %ERRORLEVEL% == 0 (
echo "Yes"
) else (
echo "No"
)
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
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
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
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>
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
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