Zeigen Sie nur den aktuellen Zweig in Git an

356

Ich habe versucht, einen speziellen Git-Befehl dafür zu suchen, aber ich konnte keinen finden. Gibt es etwas kürzeres oder schnelleres als das Folgende?

git branch | awk '/\*/ { print $2; }'
Ollie Saunders
quelle
1
Ich denke, dies ist der schnellste Weg, um den aktuellen Zweig zu bekommen
Eimantas
2
Mögliches Duplikat von Wie erhalte ich den aktuellen Filialnamen in Git?
Chandrayya GK
@ChandrayyaGK: Nein, denn bei der anderen Frage geht es darum, dies aus Ihrer IDE heraus zu tun. (Viele der Antworten sind für die Verwendung in der Befehlszeile bestimmt, daher ist es einen Blick wert, aber es handelt sich nicht um ein richtiges Duplikat. Diese Antworten sollten möglicherweise stattdessen hierher migriert werden, wenn es Antworten gibt, die einen erheblichen Mehrwert für das bieten, was bereits vorhanden ist.)
Tripleee
3
@Torek - hier ist eine weitere einfache Aufgabe, die Git erschwert hat.
JWW
Die Top-Antwort auf den Link @ChandrayyaGK ist weitaus langsamer!
Colm Bhandal

Antworten:

660
$ git rev-parse --abbrev-ref HEAD
master

Dies sollte mit Git 1.6.3 oder neuer funktionieren.

Graf
quelle
Funktioniert auch bei mir nicht mit git-1.6.2.5. git rev-parse --abbrev-ref HEAD => --abbrev-ref 311172491a9a667f9321bdf1c4fe5e22cc6e2c08 (dh rev-parse akzeptiert nicht --abbrev-ref (auch nicht in der Manpage))
JasonWoof
1
JasonWoof, arbeitet für mich in 1.6.4.2, muss das Protokoll ändern, um zu sehen, wann genau es passiert ist ;-)
Michael Krelin - Hacker
7
Soweit ich aus den Git-Protokollen ersehen kann, wurde diese Funktion am 20.04.2009 zusammengeführt und mit Version 1.6.3 veröffentlicht.
Earl
1
Das würde ich auch gerne verstehen. Wie funktioniert das eigentlich? Es sieht auch so aus, als würde --abbrev-ref nichts für ein anderes Argument zurückgeben. Es kann unmöglich nur HEAD als Argument haben.
Setafire
6
Beachten Sie, dass, wenn Sie sich in einer getrennten symbolischen Referenz befinden (möglicherweise bedeutet dies, dass Sie sich in einem Zweig befinden, aber das vorherige Commit HEADmaster
ausgecheckt haben
129

In Git 1.8.1 können Sie den Befehl git symbolic-ref mit der Option "--short" verwenden:

$ git symbolic-ref HEAD
refs/heads/develop
$ git symbolic-ref --short HEAD
develop
Dieresys
quelle
Vielen Dank. Alias ​​erstellt.
Michael Burr
7
Besser als die akzeptierte Antwort IMO, weil es auf Repos ohne Commits funktioniert
Jerome Dalbert
2
Erhalten Sie den Fehler, fatal: ref HEAD is not a symbolic refwenn Sie dies als Teil eines TravisCI-
Builds
schien in GIT 1.9.1 nicht zu funktionieren `` `git version 1.9.1 fatal: ref HEAD ist kein symbolischer ref` ``
Richard
Funktioniert für mich: Git Version 2.16.2.windows.1
Tagc
59

Mit Git 2.22 (Q2 2019) haben Sie einen einfacheren Ansatz : git branch --show-current.

Siehe Commit 0ecb1fc (25. Oktober 2018) von Daniels Umanovskis ( umanovskis) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 3710f60 , 07. März 2019)

branch: vorstellen --show-current Anzeigeoption

Wenn mit aufgerufen --show-current, git branchwird der aktuelle Filialname gedruckt und beendet.
Es wird nur der tatsächliche Name gedruckt, ohne refs/heads.
Im getrennten HEAD-Zustand wird nichts ausgegeben.

Bestimmt sowohl für die Skripterstellung als auch für die interaktive / informative Verwendung.
Im Gegensatz dazu git branch --listist keine Filterung erforderlich, um nur den Filialnamen zu erhalten.

VonC
quelle
15
Schließlich wurde hinzugefügt, was von Anfang an so hätte sein sollen!
dtasev
27

Sie könnten an der Ausgabe von interessiert sein

git symbolic-ref HEAD

Insbesondere, abhängig von Ihren Anforderungen und Ihrem Layout, möchten Sie dies möglicherweise tun

basename $(git symbolic-ref HEAD)

oder

git symbolic-ref HEAD | cut -d/ -f3-

und dann gibt es wieder die .git/HEADDatei, die auch für Sie von Interesse sein kann.

Michael Krelin - Hacker
quelle
2
Sie können verkürzen git rev-parse --symbolic-full-namezu git symbolic-ref.
Earl
1
Sie müssen nicht verwenden basenameoder cut; Verwenden Sie BR=${BR#refs/heads/}(wobei BR der Name der Variablen ist, deren Ausgabe Sie gespeichert haben git symbolic-ref HEAD).
Jakub Narębski
Jakub natürlich nicht, vorausgesetzt, Sie haben die Ausgabe in Variable.
Michael Krelin - Hacker
5
kann git symbolic-ref --short HEADauch
Fahad Siddiqui
2
Dies wird unterbrochen, wenn Ihre Filialnamen Schrägstriche enthalten ("task / foo", "feature / bar"). Ein paar meiner Buildskripte scheiterten, als Kollegen entschieden, dass Schrägstriche cool sind ...
vacri
13

Soweit ich das beurteilen kann, gibt es keine Möglichkeit, nur den aktuellen Zweig in Git nativ anzuzeigen. Daher habe ich Folgendes verwendet:

git branch | grep '*'
theruss
quelle
3
Während das mit GNU-Coreutils funktioniert, grep '*'handelt es sich nominell um einen Syntaxfehler. Du willst wahrscheinlich git branch | sed -n 's/^\* //p'sowieso. Oder tatsächlich, was das OP überhaupt gepostet hat, was dasselbe ist.
Tripleee
@tripleee Kannst du mir erklären, warum grep '*'nominell ein Syntaxfehler vorliegt?
JK ABC
1
@JKABC: @tripleee meinte, dass dies '*'ein regulärer Ausdruck ist und als solcher ungültig ist. Sie möchten wahrscheinlich verwenden '[*]'(dh Zeichen *anstelle des Operators "null oder mehrmals").
Johndodo
2
@ Johndodo Danke für die Klarstellung, es macht jetzt Sinn für mich. Normalerweise mache ich das bisgrep '\*'
JK ABC
2
kann den Filialnamen nur mitgit branch | grep "*" | cut -d' ' -f2
Fahad Siddiqui
7

Ich denke, das sollte schnell gehen und kann mit einer Python-API verwendet werden:

git branch --contains HEAD
* master
Urvish
quelle
4
Dies gibt den aktuellen Zweig nicht aus. Es gibt die Liste der Zweige aus, die zufällig auf die Commit-HEAD-Punkte zeigen. Und ja, es kann sich überschneiden, aber dies kann zu Missverständnissen führen. Erstellen Sie einen neuen Zweig von Ihrem Standort aus und wiederholen Sie Ihre Zeile: zwei Zweige. Frage fragt nach " nur dem aktuellen Zweig ".
RomainValeri
4

Ich benutze

/etc/bash_completion.d/git

Es wurde mit Git geliefert und bietet eine Eingabeaufforderung mit dem Namen des Zweigs und der Vervollständigung der Argumente.

iny
quelle
Wie kann diese Eingabeaufforderung aktiviert werden?
Alex
In Ubuntu kann $ source /etc//bash_completion.d/git-prompt File auf verschiedenen Systemen unterschiedlich benannt sein. (Hinweis: sourceSchlüsselwort ist das gleiche wie nur .(Punkt) in Bash.)
Michael
1

Dies ist nicht kürzer, aber es handelt sich auch um abgetrennte Zweige:

git branch | awk -v FS=' ' '/\*/{print $NF}' | sed 's|[()]||g'
arn0n
quelle
1

Der Vollständigkeit echo $(__git_ps1)halber sollten Sie zumindest unter Linux den Namen des aktuellen Zweigs in Klammern angeben.

Dies kann in einigen Szenarien nützlich sein, da es sich nicht um einen Git-Befehl handelt (abhängig von Git), insbesondere zum Einrichten Ihrer Bash-Eingabeaufforderung zum Anzeigen des aktuellen Zweigs .

Zum Beispiel:

/mnt/c/git/ConsoleApp1 (test-branch)> echo $(__git_ps1)
(test-branch)
/mnt/c/git/ConsoleApp1 (test-branch)> git checkout master
Switched to branch 'master'
/mnt/c/git/ConsoleApp1 (master)> echo $(__git_ps1)
(master)
/mnt/c/git/ConsoleApp1 (master)> cd ..
/mnt/c/git> echo $(__git_ps1)

/mnt/c/git>
Tymtam
quelle
Das Element ist ein Alias ​​und sollte für interaktive Shell-Skripte vorhanden sein. Es fehlt wahrscheinlich für jede Art von Skripten.
Alexander Stohr
0

Jemand könnte dies ( ) hilfreich finden. Der aktuelle Zweig wird mit einem * gekennzeichnet.git show-branch --current

host-78-65-229-191:idp-mobileid user-1$ git show-branch --current
! [CICD-1283-pipeline-in-shared-libraries] feat(CICD-1283): Use latest version of custom release plugin.
 * [master] Merge pull request #12 in CORES/idp-mobileid from feature/fix-schema-name to master
--
+  [CICD-1283-pipeline-in-shared-libraries] feat(CICD-1283): Use latest version of custom release plugin.
+  [CICD-1283-pipeline-in-shared-libraries^] feat(CICD-1283): Used the renamed AWS pipeline.
+  [CICD-1283-pipeline-in-shared-libraries~2] feat(CICD-1283): Point to feature branches of shared libraries.
-- [master] Merge pull request #12 in CORES/idp-mobileid from feature/fix-schema-name to master
Kaliyug-Antagonist
quelle