Wie erhalte ich den aktuellen Filialnamen in Git?

2594

Ich habe einen Subversion-Hintergrund und als ich einen Zweig hatte, wusste ich, woran ich mit "Diese Arbeitsdateien zeigen auf diesen Zweig" arbeitete.

Aber mit Git bin ich mir nicht sicher, ob ich eine Datei in NetBeans oder Notepad ++ bearbeite, ob sie an den Master oder einen anderen Zweig gebunden ist.

Es gibt kein Problem mit gitin Bash, es sagt mir, was ich tue.

mike628
quelle
11
Lassen Sie Ihre IDE die Datei anzeigen .git/HEAD, möglicherweise in einem übergeordneten Verzeichnis
Tino
101
stackoverflow.com/questions/1417957/… $ git rev-parse --abbrev-ref HEAD
fantastisch
2
Mögliches Duplikat von Wie man den aktuell
ausgecheckten
7
Mögliches Duplikat von Nur den aktuellen Zweig in Git
anzeigen
9
Mit Git 2.22 (Q2 2019) haben Sie einen einfacheren Ansatz : git branch --show-current. Siehe meine Antwort hier .
VonC

Antworten:

2305
git branch

sollte alle lokalen Filialen Ihres Repos anzeigen. Der markierte Zweig ist Ihr aktueller Zweig.

Wenn Sie nur den Namen des Zweigs abrufen möchten, in dem Sie sich befinden, haben Sie folgende Möglichkeiten:

git rev-parse --abbrev-ref HEAD
roberttdev
quelle
Aber das hilft mir nicht mit Notepad ++ und Netbeans. Nur git bash (und Probobly Vim) und ich habe das erwähnt. Ich versuche mit anderen Ide- und Texteditoren zu arbeiten, die keine Befehlszeile haben.
Mike628
@ mike628 Eigentlich helfen sie dir, außer du willst etwas, das über die GUI zugänglich ist. Richtig?
Tadeck
2
Wenn Sie bereit sind, in Eclipse zu arbeiten, gibt es ein Programm namens "eGit" mit einer GUI, die Ihnen den aktuellen Zweig für alle darin enthaltenen Repos anzeigt. Ansonsten weiß ich nicht ... Sie wären dem Ersteller des Plugins ausgeliefert, das Sie verwenden möchten und das mit Ihrer Programmauswahl kompatibel ist (falls vorhanden).
Roberttdev
2
nach einem git checkout --orphan foodann git branchkonnte der Zweig nicht angezeigt werden foo. Während git symbolic-ref HEADwie vorgeschlagen eine andere Antwort funktionierte.
Marcus Junius Brutus
2
Downvote, wir wollen nur die aktuelle Filiale als Standard, nicht alle Filialen
Alexander Mills
4657

Sie können Folgendes tun, um den aktuellen Zweig anzuzeigen, in dem Sie sich befinden, ohne dass die anderen Zweige aufgelistet sind:

git rev-parse --abbrev-ref HEAD

Referenz:

Jistanidiot
quelle
132
@ChrisNelson, da nur der aktuelle Zweig angezeigt wird und nicht eine lange Liste aller Zweige.
Avakar
73
Gut, leider funktioniert es nicht, wenn Sie sich in einem 'losgelösten HEAD'-Zustand befinden (es gibt nur' HEAD 'aus, was völlig nutzlos ist).
Carlos Campderrós
34
Ich denke von den Git-Interna, wenn Sie sich in einem "losgelösten HEAD" -Zustand befinden, gibt es keine Verfolgung des Zweigs, zu dem er gehört, weil git branchShows * (no branch), die auch nutzlos sind ...
Carlos Campderrós
76
"git symbolic-ref --short HEAD" funktioniert ebenfalls für diesen Zweck
dusktreader
22
git rev-parse --abbrev-ref HEAD 2>/dev/null Der Teil / dev / null verhindert, dass ein Fehler angezeigt wird, wenn Sie gerade ein neues Repository erstellt haben, das noch nicht HEAD enthält.
Paradiesstaub
523

Sie haben auch git symbolic-ref HEADdie vollständige Referenz.

Um nur den Filialnamen in Git v1.8 und höher anzuzeigen (danke an Greg für den Hinweis):

git symbolic-ref --short HEAD

Auf Git v1.7 + können Sie außerdem Folgendes tun:

git rev-parse --abbrev-ref HEAD

Beide sollten denselben Zweigstellennamen angeben, wenn Sie sich in einem Zweig befinden. Wenn Sie auf einem losgelösten Kopf sind, unterscheiden sich die Antworten.

Hinweis:

Bei einem früheren Client scheint dies zu funktionieren:

git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"

- Darien 26. März 2014

Wernight
quelle
7
Wie alle anderen Antworten funktioniert dies nicht, wenn Sie sich in einem "freistehenden HEAD"
-Zustand befinden
51
@ CarlosCampderrós: ​​Wenn Sie sich in einem getrennten HEAD-Zustand befinden, gibt es keine aktuelle Niederlassung. Schließlich kann das Commit, in dem Sie sich befinden, über null, einen oder mehrere Zweige erreichbar sein.
Flimm
2
Dies macht Probleme in leeren Git-Repositories, wenn es keinen HEAD gibt
Arne
8
Mit Git Version 2.4.4 git rev-parse --abbrev-ref HEADwird angezeigt , HEADwann Sie sich auf einem abgetrennten Kopf befinden.
Peterhil
Die beste Antwort ist immer noch, git symbolic-ref HEAD | sed -e "s/^refs\/heads\///" da eine Zeichenfolge angezeigt wird, wie HEAD detached at a63917fin einem getrennten Zustand, im Gegensatz zu den anderen Antworten, die entweder nichts oder HEAD anzeigen . Das ist wichtig.
Bernard
265

Zu meiner eigenen Referenz (aber es könnte für andere nützlich sein) habe ich einen Überblick über die meisten in diesem Thread erwähnten (grundlegenden Befehlszeilen-) Techniken gegeben, die jeweils auf mehrere Anwendungsfälle angewendet wurden: HEAD ist (zeigt auf):

  • lokale Niederlassung (Master)
  • Remote-Tracking-Zweig, synchron mit dem lokalen Zweig (Ursprung / Master bei gleichem Commit wie Master)
  • Remote-Tracking-Zweig, nicht synchron mit einem lokalen Zweig (origin / feature-foo)
  • Tag (v1.2.3)
  • Submodul (im Submodulverzeichnis ausführen)
  • allgemein losgelöster Kopf (keiner der oben genannten)

Ergebnisse:

  • git branch | sed -n '/\* /s///p'
    • Lokale Niederlassung: master
    • Fernverfolgungszweig (synchron): (detached from origin/master)
    • Remote-Tracking-Zweig (nicht synchron): (detached from origin/feature-foo)
    • Etikett: (detached from v1.2.3)
    • Submodul: (HEAD detached at 285f294)
    • allgemein losgelöster Kopf: (detached from 285f294)
  • git status | head -1
    • Lokale Niederlassung: # On branch master
    • Fernverfolgungszweig (synchron): # HEAD detached at origin/master
    • Remote-Tracking-Zweig (nicht synchron): # HEAD detached at origin/feature-foo
    • Etikett: # HEAD detached at v1.2.3
    • Submodul: # HEAD detached at 285f294
    • allgemein losgelöster Kopf: # HEAD detached at 285f294
  • git describe --all
    • Lokale Niederlassung: heads/master
    • Fernverfolgungszweig (synchron): heads/master(Hinweis: nicht remotes/origin/master )
    • Remote-Tracking-Zweig (nicht synchron): remotes/origin/feature-foo
    • Etikett: v1.2.3
    • Submodul: remotes/origin/HEAD
    • allgemein losgelöster 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

(Zu Ihrer Information wurde dies mit Git Version 1.8.3.1 gemacht)

Stefaan
quelle
6
Zusammenfassend scheint niemand das zu tun, was ich von Hand tun würde.
Bukzor
6
Dies war sehr hilfreich für mich: git describe --all --exact-match 2>/dev/null | sed 's=.*/=='war die beste Lösung für mich (gute Namen für Tags und Zweigköpfe, keine Ausgabe für zufällige abgelöste Köpfe.
Alex Dupuy
1
Ich habe jedoch gerade festgestellt, dass die Verwendung git describeeinen schwerwiegenden Fehler aufweist, wenn mehrere Zweige auf dasselbe Commit verweisen, z. B. direkt danach git checkout -b foo- einer davon wird willkürlich verwendet (scheint der zuletzt erstellte zu sein). Ich werde meine Strategie ändern, um gefilterte Ausgabe von zu verwenden git branchund nur zu verwenden, git describewenn das Ergebnis etwas über einen abgetrennten Kopf ist.
Alex Dupuy
Eigentlich muss ich verwenden git branch --no-color, um sicherzustellen, dass der Dateiname frei von störenden Terminal-Escape-Codes ist.
Alex Dupuy
2
Das hat mir mehr als einmal sehr geholfen, danke, dass ich so gründlich bin!
Alice Purcell
154

Ab Version 2.22 von git können Sie einfach Folgendes verwenden:

git branch --show-current

Laut Manpage:

Drucken Sie den Namen des aktuellen Zweigs. Im getrennten HEAD-Zustand wird nichts gedruckt.

Max
quelle
2
Ja, das habe ich im März letzten Jahres in den Kommentaren dieser Seite erwähnt: stackoverflow.com/questions/6245570/… . Und in stackoverflow.com/a/55088865/6309 .
VonC
5
Erwähnen Sie zumindest, dass dies im getrennten HEAD-Zustand nicht funktioniert.
Ich habe
136

Eine weitere Alternative:

git name-rev --name-only HEAD
Filip Spiridonov
quelle
es kann auch mitecho ${$(git symbolic-ref --quiet HEAD)#refs/heads/}
Antoine
12
Es funktioniert nicht, wenn HEAD für Master- und Feature-Zweig identisch ist (z. B. während des Zusammenführens). Es gibt 'master' zurück, auch wenn es im Feature-Zweig ausgeführt wird.
Orest Hera
1
git checkout master && git name-rev --name-only HEAD # ac-187Es funktioniert nicht wie erwartet
Alexander Abashkin
Ich speichere dies in einer Variablen kurz vor dem Zusammenführen und auch in Fällen, in denen mein HEAD möglicherweise nicht mehr angehängt wird, wenn ich ein bestimmtes Commit auschecke. In diesem Fall funktioniert dies einwandfrei.
Ishaan Sejwal
4
Ich mache das aus einer Jenkins-Pipeline. Dies scheint vorerst die beste Antwort für mich zu sein. Tun git branch --listsagt nur * (HEAD detached at 7127db5). Tun git rev-parse --abbrev-ref HEADsagt nur HEADund so weiter.
Mig82
91

Nun einfach, ich habe es in einem Einzeiler (Bash) bekommen

git branch | sed -n '/\* /s///p'

(Gutschrift: Begrenzte Versöhnung)

Und während ich dort bin, der eine Liner, der den Fernverfolgungszweig erhält (falls vorhanden)

git rev-parse --symbolic-full-name --abbrev-ref @{u}
Olivier Refalo
quelle
8
Zu viele Schrägstriche! :) sed -n 's/\* //p'macht den Trick. Obwohl ich zum Paranoiden tendiere, würde ich es damit verankern sed -n 's/^\* //p'.
Mark Reed
65

Sie können einfach die Befehlszeile (Konsole) unter Linux in das Repository-Verzeichnis eingeben:

$ git status

und Sie werden einen Text sehen, unter dem etwas Ähnliches wie:

...
On branch master
...

Das heißt, Sie befinden sich derzeit in der masterFiliale. Wenn Sie gerade eine Datei bearbeiten und diese sich im selben lokalen Repository befindet (lokales Verzeichnis mit den Dateien, die der Git-Versionskontrollverwaltung unterliegen), bearbeiten Sie die Datei in diesem Zweig.

Tadeck
quelle
2
Je nachdem, was Sie tun möchten, können Sie git statusnur die erste Ausgabezeile verwenden und abrufen, mit git status | head -1der sich so etwas ergibt # On branch master. Ich bin sicher, dass auch Versionsunterschiede berücksichtigt werden müssen.
Joshua Pinter
@JoshPinter: Sie können auch verwenden git status | grep 'On branch', was den gleichen Effekt haben sollte (sollte, bedeutet nicht, dass es wird, wenn Ihre Version von Git es anders anzeigt). Oder git branch | grep '*', der den Namen des Zweigs mit einem Stern am Anfang anzeigt.
Tadeck
Ja, das funktioniert auch und ist möglicherweise flexibler. Mein Endergebnis für die Anzeige nur des Filialnamens in einer dev Rails App war:<tick>git status | head -1<tick>.gsub('# On branch ', '')
Joshua Pinter
1
git statusEs kann lange dauern, bis ein Wert zurückgegeben wird, wenn viele Dateien verwaltet werden.
der Blechmann
Ja, wenn Sie beispielsweise den Zweig auf einer Webseite drucken möchten, git statuskann dies die Generierungszeit der gesamten Seite verkürzen.
Artem Russakovskii
36
git symbolic-ref -q --short HEAD

Ich verwende dies in Skripten, die den aktuellen Filialnamen benötigen. Es zeigt Ihnen den aktuellen kurzen symbolischen Verweis auf HEAD, der Ihr aktueller Filialname ist.

Kousha
quelle
1
Danke, funktioniert super! - Ich füge damit auch "-C path_to_folder" in mein Skript ein.
Tony
1
Dies ist eine gute Lösung, da mit der Option -q ein Fehlercode im Status "losgelöster KOPF" zurückgegeben wird, aber nichts an stderr gedruckt wird.
Hallidave
Dies ist die einzige Lösung, die für mich bei einem neuen Repo ohne
Verpflichtungen funktioniert hat
26
git branch | grep -e "^*" | cut -d' ' -f 2

zeigt nur den Filialnamen an

ungalcrys
quelle
Wenn Ihr Zweig so etwas wie "* (HEAD losgelöst bei SUM_BRANCH_01)" anzeigt, versuchen Sie diesen "Git-Zweig | grep -e" ^ * "| cut -d '' -f 5 | cut -d ')' -f 1 "
Dylan Kapp
Ich habe gerade genau dasselbe Skript erstellt, um den aktuellen Filialnamen zu erhalten. Ich dachte, es könnte bei Unterschieden helfen.
tggagne
25

git branch Nur den aktuellen Filialnamen anzeigen.

Während der Git-Zweig Ihnen alle Zweige anzeigt und den aktuellen mit einem Sternchen hervorhebt, kann dies bei der Arbeit mit vielen Zweigen zu umständlich sein.

Verwenden Sie Folgendes, um nur den Zweig anzuzeigen, in dem Sie sich gerade befinden:

git rev-parse --abbrev-ref HEAD
Lawrence Paje
quelle
Dies ist großartig für CI und andere Build-Tools!
Telefon512
beste Antwort für die Verwendung in einem Skript
Ben Keil
1
@ DylanNicholson git branch --containslistet manchmal mehr als einen Zweig auf.
Joe Chacko
22

Es wurde eine Befehlszeilenlösung mit der gleichen Länge wie die von Oliver Refalo mit dem guten alten awk gefunden:

git branch | awk '/^\*/{print $2}'

awkliest das als "mache das Zeug in {}Zeilen, die mit dem regulären Ausdruck übereinstimmen". Standardmäßig werden durch Leerzeichen getrennte Felder angenommen, sodass Sie das zweite drucken. Wenn Sie davon ausgehen können, dass nur die Zeile mit Ihrem Zweig das * hat, können Sie das ^ löschen. Ah, Bash Golf!

Silas Barta
quelle
19
#!/bin/bash
function git.branch {
  br=`git branch | grep "*"`
  echo ${br/* /}
}
git.branch
Dziamid
quelle
18

Warum nicht die git-fähige Shell-Eingabeaufforderung verwenden, die Ihnen den Namen des aktuellen Zweigs anzeigt? git statushilft auch.


Wie git-prompt.sh aus contrib/tut es (git Version 2.3.0), wie definiert __git_ps1Helferfunktion:

  1. Erstens gibt es einen Sonderfall, wenn eine laufende Rebase erkannt wird. Git verwendet während des Rebase-Prozesses einen unbenannten Zweig (losgelöster HEAD), um ihn atomar zu machen, und der ursprüngliche Zweig wird an anderer Stelle gespeichert.

  2. Wenn die .git/HEADDatei ein symbolischer Link ist (ein sehr seltener Fall aus der alten Geschichte von Git), wird sie verwendetgit symbolic-ref HEAD 2>/dev/null

  3. Sonst liest es .git/HEADDatei. Die nächsten Schritte hängen vom Inhalt ab:

    • Wenn diese Datei nicht vorhanden ist, gibt es keinen aktuellen Zweig. Dies geschieht normalerweise, wenn das Repository leer ist.

    • Wenn es mit dem 'ref: 'Präfix beginnt , dann .git/HEADist symref (symbolische Referenz), und wir befinden uns im normalen Zweig. Entfernen Sie dieses Präfix, um den vollständigen Namen zu erhalten, und entfernen refs/heads/Sie den Kurznamen des aktuellen Zweigs:

      b="${head#ref: }"
      # ...
      b=${b##refs/heads/}
      
    • Wenn es nicht mit beginnt 'ref: ', wird HEAD (anonymer Zweig) getrennt und zeigt direkt auf ein Commit. Verwenden Sie git describe ...diese Option , um das aktuelle Commit in lesbarer Form zu schreiben.

Ich hoffe das hilft.

Jakub Narębski
quelle
3
Und wenn Sie eine git-fähige Shell-Eingabeaufforderung entwickeln, welche der Antworten hier sollten Sie verwenden? Schildkröten ganz nach unten.
Tripleee
1
@tripleee: Leihen Sie Ideen von github.com/git/git/blob/master/contrib/completion/git-prompt.sh
Jakub Narębski
4
Was für die Aufzeichnung zu tun scheint, git describe --contains --all HEADwas ich derzeit an keiner anderen Stelle auf dieser Seite sehe. Wie Sie sicher wissen, werden Antworten nur mit Link in StackOverflow nicht empfohlen.
Tripleee
2
@tripleee: Ich habe eine Erklärung hinzugefügt, wie git-prompt.sh(aka __git_ps1) es macht ...
Jakub Narębski
17

Eine weniger laute Version für den Git-Status würde den Trick machen

git status -bsuno

Es wird ausgedruckt

## branch-name
Dgolovin
quelle
1
##
16

Entschuldigung, dies ist eine weitere Befehlszeilenantwort, aber das war es, wonach ich gesucht habe, als ich diese Frage gefunden habe und viele dieser Antworten hilfreich waren. Meine Lösung ist die folgende Bash-Shell-Funktion:

get_branch () {
    git rev-parse --abbrev-ref HEAD | grep -v HEAD || \
    git describe --exact-match HEAD 2> /dev/null || \
    git rev-parse HEAD
}

Dies sollte mir immer etwas geben, das sowohl für Menschen lesbar als auch direkt als Argument verwendbar ist git checkout.

  • auf einer lokalen Niederlassung: feature/HS-0001
  • bei einem getaggten Commit (getrennt): v3.29.5
  • auf einem entfernten Zweig (getrennt, nicht markiert): SHA1
  • bei jedem anderen getrennten Commit: SHA1
dmaestro12
quelle
1
Vielen Dank, dass Sie dies gepostet haben. Keine der anderen Antworten schien sich darum zu kümmern, immer etwas zu produzieren, das als Argument verwendet werden kann git checkout.
zwol
15

Sie können git bash für den Arbeitsverzeichnisbefehl wie folgt verwenden

git status -b

Es wird Ihnen sagen, auf welchem ​​Zweig Sie sich befinden. Es gibt viele Befehle, von denen einige nützlich sind

-s

--short Geben Sie die Ausgabe im Kurzformat an.

-b --branch Zeigt die Filial- und Tracking-Informationen auch im Kurzformat an.

--porcelain [=] Geben Sie die Ausgabe in einem einfach zu analysierenden Format für Skripte an. Dies ähnelt der kurzen Ausgabe, bleibt jedoch in allen Git-Versionen und unabhängig von der Benutzerkonfiguration stabil. Siehe unten für Details.

Der Versionsparameter wird verwendet, um die Formatversion anzugeben. Dies ist optional und verwendet standardmäßig das Format der Originalversion v1.

--long Geben Sie die Ausgabe im Langformat an. Dies ist die Standardeinstellung.

-v --verbose Zeigen Sie zusätzlich zu den Namen der Dateien, die geändert wurden, auch die Textänderungen an, die zum Festschreiben bereitgestellt werden sollen (dh wie die Ausgabe von git diff --cached). Wenn -v zweimal angegeben wird, werden auch die Änderungen im Arbeitsbaum angezeigt, die noch nicht bereitgestellt wurden (dh wie die Ausgabe von git diff).

Prateek Gangwal
quelle
14
git status 

gibt auch den Filialnamen zusammen mit Änderungen an.

z.B

>git status
On branch master // <-- branch name here
.....
Satheesh Kumar
quelle
13

Im Laufe der Zeit könnten wir eine wirklich lange Liste von Zweigen haben.

Während einige der anderen Lösungen großartig sind, mache ich Folgendes (vereinfacht aus Jacobs Antwort):

git branch | grep \*

Jetzt,

git status

funktioniert, aber nur, wenn es lokale Änderungen gibt

karthikr
quelle
13

Ich empfehle die Verwendung eines dieser beiden Befehle.

git branch | grep -e "^*" | cut -d' ' -f 2

ODER

git status | sed -n 1p | cut -d' ' -f 3

ODER (ausführlicher)

git status -uno -bs| cut -d'#' -f 3 | cut -d . -f 1| sed -e 's/^[ \t]//1'| sed -n 1p

Jackotonye
quelle
12

Stellen Sie in Netbeans sicher, dass Versionsanmerkungen aktiviert sind (Ansicht -> Versionsetiketten anzeigen). Sie können dann den Filialnamen neben dem Projektnamen sehen.

http://netbeans.org/bugzilla/show_bug.cgi?id=213582

Saroj
quelle
Wenn die Versionsanmerkungen aktiviert sind, müssen Sie nur mit der Maus über den Ordner "Projekt" (oder "Datei" oder "Favorit") fahren, um den aktuellen Zweig anzuzeigen.
Idclaar
12

Was ist damit?

{ git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"
ShogunPanda
quelle
1
Viel bessere Antwort, da es das abgenommene HEAD-Gehäuse gut handhabt.
Pat
2
Scheint, als sollten Sie () nicht {} verwenden, um die Git-Befehle zu verpacken
Pat
@Pat Es ist nicht erforderlich, eine separate Subshell zu erzeugen, wie dies bei () der Fall wäre. {} ist in Ordnung, außer Sie müssen ein hinzufügen; oder Zeilenumbruch vor dem}. Eigentlich könnten Sie das {} einfach ganz weglassen, es sei denn, Sie müssten die Befehle gruppieren.
aij
Muss das symbolic-refTeil nicht auch --shortvermeiden, dem Verzweigungsnamen ein Präfix voranzustellen refs/heads/?
rjp
11

Ich habe ein einfaches Skript namens git-cbr( aktueller Zweig ), das den aktuellen Zweignamen ausgibt.

#!/bin/bash

git branch | grep -e "^*"

Ich habe dieses Skript in einem benutzerdefinierten Ordner abgelegt ( ~/.bin). Der Ordner befindet sich in $PATH.

Wenn ich jetzt in einem Git-Repo bin, tippe ich einfach ein git cbr, um den aktuellen Filialnamen auszudrucken.

$ git cbr
* master

Dies funktioniert, weil der gitBefehl sein erstes Argument verwendet und versucht, ein Skript mit dem Namen von auszuführen git-arg1. Versucht beispielsweise, git branchein Skript mit dem Namen git-branchusw. auszuführen .

Diego Pino
quelle
11

Sie können Ihre Bash-Ausgabe dauerhaft so einrichten, dass Ihr Git-Branch-Name angezeigt wird. Es ist sehr praktisch, wenn Sie mit verschiedenen Zweigen arbeiten und nicht $ git statusständig tippen müssen . Github Repo Git-Awareness-Eingabeaufforderung .

Öffnen Sie Ihr Terminal (Strg-Alt-T) und geben Sie die Befehle ein

mkdir ~/.bash
cd ~/.bash
git clone git://github.com/jimeh/git-aware-prompt.git

Bearbeiten Sie Ihre .bashrc mit dem sudo nano ~/.bashrcBefehl (für Ubuntu) und fügen Sie oben Folgendes hinzu:

export GITAWAREPROMPT=~/.bash/git-aware-prompt
source "${GITAWAREPROMPT}/main.sh"

Fügen Sie dann den Code ein

export PS1="\${debian_chroot:+(\$debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\] \[$txtcyn\]\$git_branch\[$txtred\]\$git_dirty\[$txtrst\]\$ "

Am Ende derselben Datei haben Sie den Installationscode zuvor eingefügt. Dadurch erhalten Sie die kolorierte Ausgabe:Geben Sie hier die Bildbeschreibung ein

Kirill Zhuravlov
quelle
10

Der folgende Shell-Befehl teilt Ihnen den Zweig mit, in dem Sie sich gerade befinden.

git branch | grep ^\*

Wenn Sie diesen langen Befehl nicht jedes Mal eingeben möchten, wenn Sie den Zweig kennen möchten und Bash verwenden, geben Sie dem Befehl einen kurzen Alias, z. B. einen Alias cb.

alias cb='git branch | grep ^\*'

Wenn Sie sich im Zweigstellenmaster befinden und Ihre Eingabeaufforderung lautet $, erhalten Sie * masterFolgendes.

$ cb
* master
mrrusof
quelle
Dies gibt keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlassen Sie einen Kommentar unter seinem Beitrag. - Aus dem Rückblick
Rashwan L
1
Warum denkst du das?
Mrrus vom
Sie sollten Ihren Beitrag für das OP kommentieren und beschreiben, damit Sie Ihren Beitrag leichter verstehen.
Rashwan L
1
Macht perfekt Sinn.
Mrrusof
1
Wenn Sie zsh verwenden, müssen Sie den Grep-Regex in einfache Anführungszeichen setzen:git branch | grep '^\*'
aaaarrgh
9

Gibt entweder den Zweignamen oder SHA1 zurück, wenn der Kopf abgenommen ist:

git rev-parse --abbrev-ref HEAD | grep -v ^HEAD$ || git rev-parse HEAD

Dies ist eine Kurzversion der Antwort von @ dmaestro12 und ohne Tag-Unterstützung.

Benutzer
quelle
8
besser:git symbolic-ref --quiet --short HEAD || git rev-parse --short HEAD
blau
8

Wenn Sie wirklich möchten, dass der letzte Zweig / Tag auch im getrennten HEAD-Status ausgecheckt wird.

git reflog HEAD | grep 'checkout:' | head -1 | rev | cut -d' ' -f1 | rev

Update Dies ist schöner, wenn Sie Angst haben und keine Angst haben.

git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}'
Ryan
quelle
Das rev | cut -d' ' -f1| revkann vereinfacht werden mitawk '{print $NF}'
Steve Buzonas
1
Dies ist zwar auch nicht kinderleicht, da Sie eine bestimmte Revision per Hash auschecken können, sodass das Reflog nur anzeigt, dass checkout: moving from ba7571b7fc5b8f31b8d0625821269afaa655577e to f68be8cf7bea917a5a0562b619e50368de0068a9es sich immer noch um einen nützlichen Trick handelt, der dazu beitragen kann, einige Fälle eindeutig zu machen.
Alex Dupuy
1
Weitere Verkürzung aufgit reflog | awk '$3=="checkout:" {print $NF; exit}'
jthill
6

Ich weiß, dass dies spät ist, aber auf einem Linux / Mac können Sie vom Terminal aus Folgendes verwenden.

git status | sed -n 1p

Erläuterung:

git status -> ruft den Arbeitsbaumstatus
sed -n 1p ab -> ruft die erste Zeile aus dem Statuskörper ab

Die Antwort auf den obigen Befehl sieht wie folgt aus:

"On branch your_branch_name"
skippy
quelle
2
head -1würde der übliche Weg
Bukzor
5

Sie können auch die Variable GIT_BRANCH verwenden, wie hier angezeigt: https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin

Das Git-Plugin legt verschiedene Umgebungsvariablen fest, die Sie in Ihren Skripten verwenden können:

GIT_COMMIT - SHA des Stroms

GIT_BRANCH - Name des aktuell verwendeten Zweigs, z. B. "master" oder "origin / foo"

GIT_PREVIOUS_COMMIT - SHA des zuvor erstellten Commits aus demselben Zweig (der aktuelle SHA beim ersten eingebauten Zweig)

GIT_URL - Remote-URL des Repositorys

GIT_URL_N - Repository-Remote-URLs, wenn mehr als 1 Fernbedienungen vorhanden sind, z. B. GIT_URL_1, GIT_URL_2

GIT_AUTHOR_EMAIL - Committer / Autor E-Mail

GIT_COMMITTER_EMAIL - Committer / Autor E-Mail

user3405314
quelle
5

Fügen Sie es zur PS1Verwendung des Mac hinzu:

PS1='\W@\u >`[ -d .git ] && git branch | grep  ^*|cut -d" " -f2`> $ '

Bevor Sie den obigen Befehl ausführen:

Geben Sie hier die Bildbeschreibung ein

Nach dem Ausführen dieses Befehls:

Geben Sie hier die Bildbeschreibung ein

Keine Sorge, wenn es sich nicht um ein GIT-Repository handelt, wird kein Fehler angezeigt, [-d .git]wodurch überprüft wird, ob ein .gitOrdner vorhanden ist oder nicht.

Abdennour TOUMI
quelle