Wie erhalte ich den Namen des aktuellen Zweigs in Git?
Wie erhalte ich den aktuellen Zweignamen in Git?
Mike628
roberttdev
git branch
sollte alle lokalen Zweige Ihres Repos anzeigen. Der markierte Zweig ist Ihr aktueller Zweig.
So rufen Sie nur den Namen der Filiale ab, in der Sie sich befinden:
git rev-parse --abbrev-ref HEAD
oder mit Git 2.22 und höher:
git branch --show-current
-
Aber das hilft mir nicht mit Notepad++ und Netbeans. Einfach git bash (und wahrscheinlich Vim) und ich habe das erwähnt. Ich versuche, mit anderen Ides und Texteditoren zu arbeiten, die keine Befehlszeile sind.
– Mike628
5. Juni 2011 um 20:30 Uhr
-
@ Mike628 Eigentlich helfen sie dir, außer du willst etwas, das über die GUI zugänglich ist. Richtig?
– Tadeck
5. Juni 2011 um 20:34 Uhr
-
Wenn Sie bereit sind, in Eclipse zu arbeiten, gibt es ein Programm namens “eGit”, das über eine GUI verfügt, die Ihnen den aktuellen Zweig für alle darin enthaltenen Repos mitteilt. Andernfalls, ich weiß nicht, wären Sie dem Schöpfer des Plugins ausgeliefert, das Sie verwenden möchten und das mit dem von Ihnen gewählten Programm kompatibel ist (falls vorhanden).
– robertdev
5. Juni 2011 um 20:51 Uhr
-
nachdem Sie a
git checkout --orphan foo
danngit branch
Verzweigung konnte nicht angezeigt werdenfoo
. Wohingegengit symbolic-ref HEAD
Wie vorgeschlagen, hat eine andere Antwort funktioniert.– Marcus Junius Brutus
11. September 2016 um 20:13 Uhr
-
Was macht
git rev-parse --abbrev-ref HEAD
genau machen? Ich habe vorher verwendetgit describe --contains --all HEAD
aber das bricht manchmal und ich bin mir nicht ganz sicher warum.– Schneems
10. September 2020 um 15:23 Uhr
-
Wie bei allen anderen Antworten funktioniert dies nicht, wenn Sie sich in einem Zustand „losgelöster HEAD“ befinden
– Carlos Campderros
30. Januar 2013 um 10:09 Uhr
-
@CarlosCampderrós: Wenn Sie sich im getrennten HEAD-Zustand befinden, gibt es keinen aktuellen Zweig. Schließlich ist das Commit, in dem Sie sich befinden, möglicherweise über null, einen oder mehrere Zweige erreichbar.
– Flimmer
7. Januar 2014 um 14:07 Uhr
-
Dies führt zu Problemen in leeren Git-Repositories, wenn kein HEAD vorhanden ist
– Arne
31. März 2015 um 20:57 Uhr
-
Mit Git-Version 2.4.4
git rev-parse --abbrev-ref HEAD
zeigt anHEAD
wenn du auf freiem Kopf bist.– peterhil
11. Juli 2015 um 13:37 Uhr
-
Die beste Antwort ist immer noch
git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"
da es eine Zeichenfolge wie anzeigen wirdHEAD detached at a63917f
wenn in einem losgelösten Zustand, im Gegensatz zu den anderen Antworten, die entweder nichts oder HEAD zeigen. Das ist wichtig.– Bernhard
15. Januar 2016 um 6:12 Uhr
Stefan
Für meine eigene Referenz (aber es könnte für andere nützlich sein) habe ich einen Überblick über die meisten (grundlegenden Befehlszeilen-)Techniken gegeben, die in diesem Thread erwähnt werden, die jeweils auf mehrere Anwendungsfälle angewendet werden: HEAD ist (zeigt auf):
- lokaler Zweig (Master)
- Remote-Tracking-Zweig, synchron mit lokalem Zweig (Ursprung/Master mit demselben Commit wie Master)
- Remote-Tracking-Zweig, nicht synchron mit einem lokalen Zweig (origin/feature-foo)
- Tag (v1.2.3)
- Submodul (wird im Submodulverzeichnis ausgeführt)
- Allgemeiner abgetrennter Kopf (keine der oben genannten)
Ergebnisse:
git branch | sed -n '/\* /s///p'
- Lokale Niederlassung:
master
- Remote-Tracking-Zweig (synchron):
(detached from origin/master)
- Remote-Tracking-Zweig (nicht synchron):
(detached from origin/feature-foo)
- Schild:
(detached from v1.2.3)
- Submodul:
(HEAD detached at 285f294)
- allgemeiner freistehender Kopf:
(detached from 285f294)
- Lokale Niederlassung:
git status | head -1
- Lokale Niederlassung:
# On branch master
- Remote-Tracking-Zweig (synchron):
# HEAD detached at origin/master
- Remote-Tracking-Zweig (nicht synchron):
# HEAD detached at origin/feature-foo
- Schild:
# HEAD detached at v1.2.3
- Submodul:
# HEAD detached at 285f294
- allgemeiner freistehender Kopf:
# HEAD detached at 285f294
- Lokale Niederlassung:
git describe --all
- Lokale Niederlassung:
heads/master
- Remote-Tracking-Zweig (synchron):
heads/master
(Hinweis: nichtremotes/origin/master
) - Remote-Tracking-Zweig (nicht synchron):
remotes/origin/feature-foo
- Schild:
v1.2.3
- Submodul:
remotes/origin/HEAD
- allgemeiner freistehender Kopf:
v1.0.6-5-g2393761
- Lokale Niederlassung:
cat .git/HEAD
:- Lokale Niederlassung:
ref: refs/heads/master
- Submodul:
cat: .git/HEAD: Not a directory
- alle anderen Anwendungsfälle: SHA des entsprechenden Commits
- Lokale Niederlassung:
git rev-parse --abbrev-ref HEAD
- Lokale Niederlassung:
master
- alle anderen Anwendungsfälle:
HEAD
- Lokale Niederlassung:
git symbolic-ref --short HEAD
- Lokale Niederlassung:
master
- alle anderen Anwendungsfälle:
fatal: ref HEAD is not a symbolic ref
- Lokale Niederlassung:
(FYI, dies wurde mit Git-Version 1.8.3.1 gemacht)
-
Zusammenfassend scheint keiner das zu tun, was ich von Hand tun würde.
– bukzor
4. Februar 2015 um 19:31 Uhr
-
Das war für mich recht hilfreich:
git describe --all --exact-match 2>/dev/null | sed 's=.*/=='
war für mich die beste Lösung (gute Namen für Tags und Zweigköpfe, keine Ausgabe für zufällig abgelöste Köpfe.– Alex Dupuy
18. Mai 2015 um 9:31 Uhr
-
Allerdings habe ich gerade entdeckt, dass mit
git describe
hat einen schwerwiegenden Fehler, wenn es mehrere Zweige gibt, die auf denselben Commit verweisen, z. B. direkt danachgit checkout -b foo
– Es verwendet willkürlich einen von ihnen (scheint vielleicht der zuletzt erstellte zu sein). Ich werde meine Strategie ändern, um die gefilterte Ausgabe von zu verwendengit branch
und nur benutzengit describe
wenn das Ergebnis etwas von einem abgetrennten Kopf ist.– Alex Dupuy
20. Mai 2015 um 7:31 Uhr
-
Eigentlich muss ich verwenden
git branch --no-color
um sicherzustellen, dass der Dateiname frei von störenden Terminal-Escape-Codes ist.– Alex Dupuy
20. Mai 2015 um 7:48 Uhr
-
“Aktueller Zweig” (gesetzt von
checkout foo
) und “aktueller Commit” sind zwei unterschiedliche Konzepte.symbolic-ref
betrachtet nur den aktiven Zweig.describe
schaut nur zu ein Commitund wählt heuristisch aus von allen Zweigen/Tags, die darauf (oder in der Nähe davon) zeigen. DWIM-Befehle wiebranch
undstatus
Aktuellen Zweig verwenden, wenn definiert, aber alle von ihnen wählen heuristisch in allen “abgelösten KOPF”-Situationen.– Beni Cherniavsky-Paskin
22. April 2020 um 18:52 Uhr
nh2
Ab Version 2.22 von Git können Sie einfach Folgendes verwenden:
git branch --show-current
Laut Manpage:
Geben Sie den Namen des aktuellen Zweigs aus. Im abgetrennten HEAD-Zustand wird nichts gedruckt.
-
Zusammenfassend scheint keiner das zu tun, was ich von Hand tun würde.
– bukzor
4. Februar 2015 um 19:31 Uhr
-
Das war für mich recht hilfreich:
git describe --all --exact-match 2>/dev/null | sed 's=.*/=='
war für mich die beste Lösung (gute Namen für Tags und Zweigköpfe, keine Ausgabe für zufällig abgelöste Köpfe.– Alex Dupuy
18. Mai 2015 um 9:31 Uhr
-
Allerdings habe ich gerade entdeckt, dass mit
git describe
hat einen schwerwiegenden Fehler, wenn es mehrere Zweige gibt, die auf denselben Commit verweisen, z. B. direkt danachgit checkout -b foo
– Es verwendet willkürlich einen von ihnen (scheint vielleicht der zuletzt erstellte zu sein). Ich werde meine Strategie ändern, um die gefilterte Ausgabe von zu verwendengit branch
und nur benutzengit describe
wenn das Ergebnis etwas von einem abgetrennten Kopf ist.– Alex Dupuy
20. Mai 2015 um 7:31 Uhr
-
Eigentlich muss ich verwenden
git branch --no-color
um sicherzustellen, dass der Dateiname frei von störenden Terminal-Escape-Codes ist.– Alex Dupuy
20. Mai 2015 um 7:48 Uhr
-
“Aktueller Zweig” (gesetzt von
checkout foo
) und “aktueller Commit” sind zwei unterschiedliche Konzepte.symbolic-ref
betrachtet nur den aktiven Zweig.describe
schaut nur zu ein Commitund wählt heuristisch aus von allen Zweigen/Tags, die darauf (oder in der Nähe davon) zeigen. DWIM-Befehle wiebranch
undstatus
Aktuellen Zweig verwenden, wenn definiert, aber alle von ihnen wählen heuristisch in allen “abgelösten KOPF”-Situationen.– Beni Cherniavsky-Paskin
22. April 2020 um 18:52 Uhr
Filip Spiridonow
Noch eine Alternative:
git name-rev --name-only HEAD
-
es kann auch mit abgerufen werden
echo ${$(git symbolic-ref --quiet HEAD)#refs/heads/}
– Anton
16. März 2016 um 14:24 Uhr
-
Es funktioniert nicht, wenn HEAD für Master- und Feature-Branch gleich ist (zB beim Merge). Es gibt „master“ zurück, selbst wenn es auf dem Feature-Zweig ausgeführt wird.
– Orest Hera
6. April 2016 um 9:05 Uhr
-
git checkout master && git name-rev --name-only HEAD # ac-187
Es funktioniert nicht wie erwartet– Alexander Abaschkin
19. Mai 2016 um 13:41 Uhr
-
Ich speichere dies kurz vor dem Zusammenführen in einer Variablen und auch in Fällen, in denen mein HEAD möglicherweise getrennt wird, wenn ich einen bestimmten Commit auschecke. In diesen Fällen funktioniert das gut.
– Ishaan Sejwal
12. November 2016 um 17:16 Uhr
-
Ich mache das von einer Jenkins-Pipeline aus. Dies scheint also vorerst die beste Antwort für mich zu sein. Tun
git branch --list
sagt nur* (HEAD detached at 7127db5)
. Tungit rev-parse --abbrev-ref HEAD
sagt nurHEAD
usw.– Mig82
19. Juni 2017 um 11:53 Uhr
Lassen Sie Ihre IDE die Datei anzeigen
.git/HEAD
möglicherweise in einem übergeordneten Verzeichnis– Tine
4. Februar 2012 um 12:37 Uhr
stackoverflow.com/questions/1417957/… $ git rev-parse –abbrev-ref HEAD
– Fantasiegeschichte
28. Februar 2014 um 10:51 Uhr
mögliches Duplikat von Wie man den aktuell ausgecheckten Git-Zweig programmgesteuert bestimmt
– Dreier
10. Juni 2015 um 10:20 Uhr
Mögliches Duplikat von Show only the current branch in Git
– Techraf
18. Januar 2017 um 3:44 Uhr
Mit Git 2.22 (Q2 2019) haben Sie einen einfacheren Ansatz:
git branch --show-current
. Siehe meine Antwort hier.– VonC
10. März 2019 um 14:50 Uhr