it-swarm.com.de

Wie erhalte ich den aktuellen Filialnamen in Git?

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

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

Es gibt kein Problem mit git in bash, es sagt mir, was ich mache.

1927
mike628
git branch

sollte alle lokalen Niederlassungen Ihres Repos zeigen. Der markierte Zweig ist Ihr aktueller Zweig.

Wenn Sie nur den Namen des Zweigs abrufen möchten, in dem Sie sich befinden, können Sie Folgendes tun:

git branch | grep \* | cut -d ' ' -f2
1530
roberttdev

Um den aktuellen Zweig anzuzeigen, in dem Sie sich befinden, ohne die anderen aufgeführten Zweige, können Sie folgende Schritte ausführen:

git rev-parse --abbrev-ref HEAD

Referenz:

4006
Jistanidiot

Sie haben auch git symbolic-ref HEAD, der die vollständige Referenzspezifikation anzeigt.

So zeigen Sie in Git v1.8 und höher nur den Zweignamen an (danke an Greg für den Hinweis)

$ git symbolic-ref --short HEAD

Auf Git v1.7 + können Sie auch Folgendes tun:

$ git rev-parse --abbrev-ref HEAD

Beide sollten denselben Zweignamen angeben, wenn Sie sich in einem Zweig befinden. Wenn Sie sich auf einem getrennten Kopf befinden, unterscheiden sich die Antworten.

Hinweis:

Auf einem früheren Client scheint dies zu funktionieren:

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

- Darien 26. März 2014

444
Wernight

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

  • lokale Niederlassung (Master)
  • remote Tracking Branch, synchron mit dem lokalen Branch (Origin/Master bei gleichem Commit wie Master)
  • remote-Tracking-Zweig, nicht synchron mit einem lokalen Zweig (Origin/feature-foo)
  • tag (v1.2.3)
  • submodul (wird im Submodul-Verzeichnis ausgeführt)
  • allgemeiner losgelöster Kopf (keiner der oben genannten)

Ergebnisse:

  • git branch | sed -n '/\* /s///p'
    • lokale Niederlassung: master
    • fernverfolgungszweig (synchronisiert): (detached from Origin/master)
    • fernverfolgungszweig (nicht synchronisiert): (detached from Origin/feature-foo)
    • tag: (detached from v1.2.3)
    • submodul: (HEAD detached at 285f294)
    • allgemeiner losgelöster Kopf: (detached from 285f294)
  • git status | head -1
    • lokale Niederlassung: # On branch master
    • fernverfolgungszweig (synchronisiert): # HEAD detached at Origin/master
    • fernverfolgungszweig (nicht synchronisiert): # HEAD detached at Origin/feature-foo
    • tag: # HEAD detached at v1.2.3
    • submodul: # HEAD detached at 285f294
    • allgemeiner losgelöster Kopf: # HEAD detached at 285f294
  • git describe --all
    • lokale Niederlassung: heads/master
    • fernverfolgungszweig (synchronisiert): heads/master (Hinweis: nichtremotes/Origin/master)
    • fernverfolgungszweig (nicht synchronisiert): remotes/Origin/feature-foo
    • tag: v1.2.3
    • submodul: remotes/Origin/HEAD
    • allgemeiner 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, dies wurde mit Git Version 1.8.3.1 gemacht)

231
Stefaan

Eine weitere Alternative:

git name-rev --name-only HEAD
126

Naja, einfach genug, ich habe es in einem One Liner (bash)

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

(Kredit: Begrenzte Versöhnung)

Und während ich dort bin, der einzige Liner für den Remote-Tracking-Zweig (falls vorhanden)

git rev-parse --symbolic-full-name --abbrev-ref @{u}
89
Olivier Refalo

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

$ git status

und Sie werden einige Texte sehen, unter denen etwas ähnelt:

...
On branch master
...

was bedeutet, dass Sie sich derzeit im Zweig master befinden. Wenn Sie gerade eine Datei bearbeiten, die sich in demselben lokalen Repository befindet (lokales Verzeichnis, das die Dateien enthält, die unter der Versionsverwaltung von Git stehen), bearbeiten Sie die Datei in diesem Zweig.

59
Tadeck
git symbolic-ref -q --short HEAD

Ich verwende dies in Skripts, die den aktuellen Zweignamen benötigen. Es zeigt Ihnen den aktuellen kurzen symbolischen Verweis auf HEAD, der Ihren aktuellen Zweignamen darstellt.

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

zeigt nur den Zweignamen an

24
ungalcrys

Eine Kommandozeilenlösung der gleichen Länge wie Oliver Refalo's gefunden, unter Verwendung von Good Ol 'awk:

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

awk liest das als "erledige das Zeug in {} in Zeilen, die der Regex entsprechen". Standardmäßig wird davon ausgegangen, dass die Felder durch Leerzeichen getrennt sind, sodass Sie das zweite ausgeben. Wenn Sie davon ausgehen können, dass nur die Zeile in Ihrem Zweig das * hat, können Sie das ^ löschen. Ah, bash Golf!

21
Silas Barta

git branch zeigt nur den aktuellen Zweignamen an.

Während git branch Ihnen alle Äste anzeigt und die aktuelle mit einem Sternchen markiert, kann es bei der Arbeit mit vielen Ästen zu umständlich sein.

Um nur den Zweig anzuzeigen, in dem Sie sich gerade befinden, verwenden Sie:

git rev-parse --abbrev-ref HEAD
20
Lawrence Paje
#!/bin/bash
function git.branch {
  br=`git branch | grep "*"`
  echo ${br/* /}
}
git.branch
17
Dziamid

Warum nicht git-aware Shell Prompt verwenden, das den Namen des aktuellen Zweigs angibt? git status hilft auch.


Wie git-Prompt.sh aus contrib/ (git Version 2.3.0), wie in __git_ps1-Hilfsfunktion definiert:

  1. Erstens gibt es einen Sonderfall, wenn rebase in Bearbeitung erkannt wird. Git verwendet einen unbenannten Zweig (freistehender HEAD) während des Rebase-Prozesses, um ihn atomar zu machen.

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

  3. Ansonsten liest sie die .git/HEAD-Datei. Die nächsten Schritte hängen vom Inhalt ab:

    • Wenn diese Datei nicht existiert, gibt es keinen aktuellen Zweig. Dies ist normalerweise der Fall, wenn das Repository leer ist.

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

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

Ich hoffe das hilft.

15
Jakub Narębski

sie können git bash für das Arbeitsverzeichnis verwenden. Der Befehl ist wie folgt

git status -b

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

-s

--short Geben Sie die Ausgabe im Kurzformat an.

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

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

Mit dem Versionsparameter wird die Formatversion angegeben. Dies ist optional und standardmäßig auf das Format der Originalversion v1 eingestellt.

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

-v--verboseBei den Namen der geänderten Dateien werden auch die inhaltlichen Textänderungen angezeigt (d. h. wie bei der Ausgabe von git diff --cached). Wenn -v zweimal angegeben wird, werden auch die Änderungen im Arbeitsbaum angezeigt, die noch nicht bereitgestellt wurden (d. H. Wie bei der Ausgabe von git diff).

14
Prateek Gangwal

Ich empfehle, einen dieser beiden Befehle zu verwenden.

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

OR

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

12
jackotonye

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

Während einige der anderen Lösungen großartig sind, mache ich Folgendes (vereinfacht von Jacob's Antwort)

git branch | grep \*

Jetzt,

git status

funktioniert, aber nur Wenn es lokale Änderungen gibt

12
karthikr

Tut mir leid, dies ist eine weitere Befehlszeilen-Antwort, aber nach dieser Frage habe ich gesucht, und viele dieser Antworten waren hilfreich. 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 von Menschen lesbares und direkt als Argument für git checkout verwendbares geben.

  • in einer lokalen Niederlassung: feature/HS-0001
  • bei einem getaggten Festschreiben (getrennt): v3.29.5
  • auf einem entfernten Zweig (freistehend, nicht markiert): SHA1
  • bei jedem anderen freistehenden Commit: SHA1
12
dmaestro12

Eine weniger lautere Version für den Git-Status würde den Trick tun

git status -bsuno

Es wird ausgedruckt

## branch-name
11
dgolovin

Stellen Sie in Netbeans sicher, dass die Versionsanmerkungen aktiviert sind (Ansicht -> Versionierung anzeigen Labels). Der Zweigname wird dann neben dem Projektnamen angezeigt.

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

11
Saroj

Ich habe ein einfaches Skript mit dem Namen git-cbr ( current branch ), das den aktuellen Zweignamen ausgibt.

#!/bin/bash

git branch | grep -e "^*"

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

Wenn ich also in einem Git-Repo bin, tippe ich einfach git cbr, um den aktuellen Zweignamen auszudrucken.

$ git cbr
* master

Dies funktioniert, weil der Befehl git sein erstes Argument verwendet und versucht, ein Skript auszuführen, das den Namen git-arg1 trägt. Zum Beispiel versucht git branch, ein Skript mit dem Namen git-branch usw. auszuführen.

10
Diego Pino

Was ist damit?

{ git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"
10
ShogunPanda

Der folgende Shell-Befehl informiert Sie über den Zweig, 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 lernen möchten, und Sie Bash verwenden, geben Sie dem Befehl einen kurzen Aliasnamen, beispielsweise den Aliasnamen cb.

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

Wenn Sie sich im Zweigmaster befinden und Ihre Eingabeaufforderung $ lautet, erhalten Sie * master wie folgt.

$ cb
* master
9
mrrusof

Sie können Ihre bash-Ausgabe dauerhaft so einrichten, dass Ihr Git-Zweig-Name angezeigt wird. Es ist sehr praktisch, wenn Sie mit verschiedenen Zweigen arbeiten. Sie müssen nicht ständig $ git status eingeben. Github-Repo git-aware-Prompt .

Ö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 Befehl Sudo nano ~/.bashrc (für Ubuntu) und fügen Sie an der Spitze Folgendes hinzu:

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

Dann fügen Sie den Code ein 

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

am Ende der gleichen Datei haben Sie den Installationscode zuvor eingefügt. Dadurch erhalten Sie die farbige Ausgabe:  enter image description here

8

Wenn Sie wirklich möchten, dass der letzte Zweig/Tag im getrennten Zustand HEAD ausgecheckt ist.

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

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

git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}'
7
Ryan
git status 

wird auch den Zweignamen mit Änderungen angeben.

z.B.

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

Gibt entweder einen Verzweigungsnamen oder SHA1 zurück, wenn sich der Kopf in einem abgetrennten Kopf befindet:

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

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

6
user

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

git status | sed -n 1p

Erläuterung:

git status -> Ruft den Status des Arbeitsbaums ab
sed -n 1p -> erhält die erste Zeile aus dem Statuskörper 

Die Antwort auf den obigen Befehl sieht folgendermaßen aus: 

"On branch your_branch_name"
5
skippy

Fügen Sie es mit dem Mac zu PS1 hinzu: 

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

Bevor Sie den obigen Befehl ausführen: 

 enter image description here

Nachdem Sie diesen Befehl ausgeführt haben: 

 enter image description here

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

4
Abdennour TOUMI

sie können auch die Variable GIT_BRANCH wie hier verwendet verwenden: 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 aktuellen

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

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

GIT_URL - Repository-Remote-URL

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

GIT_AUTHOR_EMAIL - E-Mail des Absenders/Autors

GIT_COMMITTER_EMAIL - E-Mail des Absenders/Autors

4
user3405314

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

git branch --show-current
4
Max
git branch | grep "*" | sed "s/* //" | awk '{printf $0}' | pbcopy

Um das Ergebnis direkt in das Pasteboard zu kopieren. Danke an @ olivier-refalo für den Start…

2

Verwendung früherer Ideen; vorausgesetzt, sha1 ist 40 Zeichen; und Verweise jagen (yea, sollte die debug Druckzeilen löschen :-):

git reflog | awk '
$3 == "checkout:" && (sha == "" || sha == $1 ) {
  from=$(NF - 2)
  to=$NF
  print from, to, length(from) > "/dev/stderr"
  if (length(from) != 40) { print from ; exit; }
  sha=substr(from, 1, 7)
  print sha > "/dev/stderr"
}
'

gibt die Rohausgabe an:

$ git status
HEAD detached at 147049c
[...]
$ ./gime-branch.sh
a47be8d2167641088b66bf8f5c2bf7d3da0c642c HEAD^ 40
a47be8d
master HEAD^ 6
master
2
cagney

Fügen Sie Ihrem ~/.bash_profile einfach folgende Zeilen hinzu:

branch_show() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\[email protected]\h \[\033[32m\]\w\[\033[33m\]\$(branch_show)\[\033[00m\] $ "

Auf diese Weise können Sie den aktuellen Zweignamen in Terminal angeben

Mit freundlicher Genehmigung von Coderwall.com

1
SHi ON

Sie können dies mit einer einzelnen grep-Anweisung tun. Verwenden Sie dazu den Perl-Modus und \K, um den Übereinstimmungspuffer zurückzusetzen, sodass Sie nur den Zweignamen erhalten.

$ git branch | grep -oP "^\*\s+\K\S+$"
master
0
Joseph Lust

Verwenden Sie git branch --contains HEAD | tail -1 | xargs, es funktioniert auch für den Zustand "detached HEAD".

0
glisu

Nur lokalen Filialnamen erhalten:

git status -b -u no | awk 'NR==1{print $3;}'

Nur Remote-Filialnamen abrufen:

git status -b -u no | awk 'NR==2{print $6;}'

und git status -b -u no | awk 'NR==2{print $6;}' | tr -d "[.']", um Sonderzeichen aus der Ausgabe zu löschen

0
v.babak

Ich weiß, dass dies bereits beantwortet wurde, aber in der neuesten Version von Git öffnet der Befehl git branch eine Liste Ihrer Zweige in einer Art Aufforderung, die Sie beenden müssen. Was mich nervt ohne Ende!

Hier ist mein Fix: Öffnen Sie Ihr Bash-Profil und geben Sie Folgendes ein:

#!/bin/bash
git() {
  if [[ [email protected] == "branch" ]] then
    command git branch -a | grep -v 'remotes'
  else
    command git "[email protected]"
  fi
}

Öffnen Sie nun Terminal und testen Sie es, indem Sie die folgenden Befehle in ein git-Repo eingeben:

source ~/.zshrc
git branch 

Und voila! Eine Liste Ihrer lokalen Niederlassungen wird in Ihrem Terminal ausgedruckt.

Der Code, den Sie in Ihre bashrc-Datei schreiben, überschreibt die Standardfunktion für git branch und ersetzt sie durch einen viel längeren Befehl, der alle lokalen Zweige über das Argument -a auflistet. Dann grep das zusätzliche nicht benötigte Geschäft heraus und drucken wir es aus. Wenn Sie den Befehl grep ausschließen, wird immer noch die nervige Aufforderung angezeigt. Wenn Sie mit dem Schreiben von Bash-Befehlen nicht vertraut sind, überprüfen Sie diese Erklärung: Über .bash_profile, .bashrc, und wo soll ein Alias ​​geschrieben werden?

0
okTalk