Wie erhalte ich den aktuellen Zweignamen in Git?

Lesezeit: 7 Minuten

Benutzer-Avatar
Mike628

Wie erhalte ich den Namen des aktuellen Zweigs in Git?

  • Lassen Sie Ihre IDE die Datei anzeigen .git/HEADmö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

Benutzer-Avatar
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 dann git branch Verzweigung konnte nicht angezeigt werden foo. Wohingegen git 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 verwendet git 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 an HEAD 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 wird HEAD 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

Benutzer-Avatar
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)
  • 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
  • git describe --all
    • Lokale Niederlassung: heads/master
    • Remote-Tracking-Zweig (synchron): heads/master (Hinweis: nicht remotes/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
  • cat .git/HEAD:
    • Lokale Niederlassung: ref: refs/heads/master
    • Submodul: cat: .git/HEAD: Not a directory
    • alle anderen Anwendungsfälle: SHA des entsprechenden Commits
  • git rev-parse --abbrev-ref HEAD
    • Lokale Niederlassung: master
    • alle anderen Anwendungsfälle: HEAD
  • git symbolic-ref --short HEAD
    • Lokale Niederlassung: master
    • alle anderen Anwendungsfälle: fatal: ref HEAD is not a symbolic ref

(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 danach git 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 verwenden git branch und nur benutzen git 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 wie branch und status 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

Benutzer-Avatar
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 danach git 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 verwenden git branch und nur benutzen git 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 wie branch und status 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

Benutzer-Avatar
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). Tun git rev-parse --abbrev-ref HEAD sagt nur HEAD usw.

    – Mig82

    19. Juni 2017 um 11:53 Uhr

1331260cookie-checkWie erhalte ich den aktuellen Zweignamen in Git?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy