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 git
in Bash, es sagt mir, was ich tue.
git
branch
git-branch
mike628
quelle
quelle
.git/HEAD
, möglicherweise in einem übergeordneten Verzeichnisgit branch --show-current
. Siehe meine Antwort hier .Antworten:
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:
quelle
git checkout --orphan foo
danngit branch
konnte der Zweig nicht angezeigt werdenfoo
. Währendgit symbolic-ref HEAD
wie vorgeschlagen eine andere Antwort funktionierte.Sie können Folgendes tun, um den aktuellen Zweig anzuzeigen, in dem Sie sich befinden, ohne dass die anderen Zweige aufgelistet sind:
Referenz:
quelle
git branch
Shows* (no branch)
, die auch nutzlos sind ...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.Sie haben auch
git symbolic-ref HEAD
die vollständige Referenz.Um nur den Filialnamen in Git v1.8 und höher anzuzeigen (danke an Greg für den Hinweis):
Auf Git v1.7 + können Sie außerdem Folgendes tun:
Beide sollten denselben Zweigstellennamen angeben, wenn Sie sich in einem Zweig befinden. Wenn Sie auf einem losgelösten Kopf sind, unterscheiden sich die Antworten.
quelle
git rev-parse --abbrev-ref HEAD
wird angezeigt ,HEAD
wann Sie sich auf einem abgetrennten Kopf befinden.git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"
da eine Zeichenfolge angezeigt wird, wieHEAD detached at a63917f
in einem getrennten Zustand, im Gegensatz zu den anderen Antworten, die entweder nichts oder HEAD anzeigen . Das ist wichtig.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):
Ergebnisse:
git branch | sed -n '/\* /s///p'
master
(detached from origin/master)
(detached from origin/feature-foo)
(detached from v1.2.3)
(HEAD detached at 285f294)
(detached from 285f294)
git status | head -1
# On branch master
# HEAD detached at origin/master
# HEAD detached at origin/feature-foo
# HEAD detached at v1.2.3
# HEAD detached at 285f294
# HEAD detached at 285f294
git describe --all
heads/master
heads/master
(Hinweis: nichtremotes/origin/master
)remotes/origin/feature-foo
v1.2.3
remotes/origin/HEAD
v1.0.6-5-g2393761
cat .git/HEAD
::ref: refs/heads/master
cat: .git/HEAD: Not a directory
git rev-parse --abbrev-ref HEAD
master
HEAD
git symbolic-ref --short HEAD
master
fatal: ref HEAD is not a symbolic ref
(Zu Ihrer Information wurde dies mit Git Version 1.8.3.1 gemacht)
quelle
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.git describe
einen schwerwiegenden Fehler aufweist, wenn mehrere Zweige auf dasselbe Commit verweisen, z. B. direkt danachgit 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 verwendengit branch
und nur zu verwenden,git describe
wenn das Ergebnis etwas über einen abgetrennten Kopf ist.git branch --no-color
, um sicherzustellen, dass der Dateiname frei von störenden Terminal-Escape-Codes ist.Ab Version 2.22 von git können Sie einfach Folgendes verwenden:
Laut Manpage:
quelle
Eine weitere Alternative:
quelle
echo ${$(git symbolic-ref --quiet HEAD)#refs/heads/}
git checkout master && git name-rev --name-only HEAD # ac-187
Es funktioniert nicht wie erwartetgit branch --list
sagt nur* (HEAD detached at 7127db5)
. Tungit rev-parse --abbrev-ref HEAD
sagt nurHEAD
und so weiter.Nun einfach, ich habe es in einem Einzeiler (Bash) bekommen
(Gutschrift: Begrenzte Versöhnung)
Und während ich dort bin, der eine Liner, der den Fernverfolgungszweig erhält (falls vorhanden)
quelle
sed -n 's/\* //p'
macht den Trick. Obwohl ich zum Paranoiden tendiere, würde ich es damit verankernsed -n 's/^\* //p'
.Sie können einfach die Befehlszeile (Konsole) unter Linux in das Repository-Verzeichnis eingeben:
und Sie werden einen Text sehen, unter dem etwas Ähnliches wie:
Das heißt, Sie befinden sich derzeit in der
master
Filiale. 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.quelle
git status
nur die erste Ausgabezeile verwenden und abrufen, mitgit status | head -1
der sich so etwas ergibt# On branch master
. Ich bin sicher, dass auch Versionsunterschiede berücksichtigt werden müssen.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). Odergit branch | grep '*'
, der den Namen des Zweigs mit einem Stern am Anfang anzeigt.<tick>git status | head -1<tick>.gsub('# On branch ', '')
git status
Es kann lange dauern, bis ein Wert zurückgegeben wird, wenn viele Dateien verwaltet werden.git status
kann dies die Generierungszeit der gesamten Seite verkürzen.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.
quelle
zeigt nur den Filialnamen an
quelle
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:
quelle
git branch --contains
listet manchmal mehr als einen Zweig auf.Es wurde eine Befehlszeilenlösung mit der gleichen Länge wie die von Oliver Refalo mit dem guten alten awk gefunden:
awk
liest 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!quelle
quelle
Warum nicht die git-fähige Shell-Eingabeaufforderung verwenden, die Ihnen den Namen des aktuellen Zweigs anzeigt?
git status
hilft auch.Wie git-prompt.sh aus
contrib/
tut es (git Version 2.3.0), wie definiert__git_ps1
Helferfunktion: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.
Wenn die
.git/HEAD
Datei ein symbolischer Link ist (ein sehr seltener Fall aus der alten Geschichte von Git), wird sie verwendetgit symbolic-ref HEAD 2>/dev/null
Sonst liest es
.git/HEAD
Datei. 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/HEAD
ist symref (symbolische Referenz), und wir befinden uns im normalen Zweig. Entfernen Sie dieses Präfix, um den vollständigen Namen zu erhalten, und entfernenrefs/heads/
Sie den Kurznamen des aktuellen Zweigs:Wenn es nicht mit beginnt
'ref: '
, wird HEAD (anonymer Zweig) getrennt und zeigt direkt auf ein Commit. Verwenden Siegit describe ...
diese Option , um das aktuelle Commit in lesbarer Form zu schreiben.Ich hoffe das hilft.
quelle
git describe --contains --all HEAD
was ich derzeit an keiner anderen Stelle auf dieser Seite sehe. Wie Sie sicher wissen, werden Antworten nur mit Link in StackOverflow nicht empfohlen.git-prompt.sh
(aka__git_ps1
) es macht ...Eine weniger laute Version für den Git-Status würde den Trick machen
Es wird ausgedruckt
quelle
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:
Dies sollte mir immer etwas geben, das sowohl für Menschen lesbar als auch direkt als Argument verwendbar ist
git checkout
.feature/HS-0001
v3.29.5
quelle
git checkout
.Sie können git bash für den Arbeitsverzeichnisbefehl wie folgt verwenden
Es wird Ihnen sagen, auf welchem Zweig Sie sich befinden. Es gibt viele Befehle, von denen einige nützlich sind
--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).
quelle
gibt auch den Filialnamen zusammen mit Änderungen an.
z.B
quelle
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):
Jetzt,
funktioniert, aber nur, wenn es lokale Änderungen gibt
quelle
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
quelle
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
quelle
Was ist damit?
quelle
symbolic-ref
Teil nicht auch--short
vermeiden, dem Verzweigungsnamen ein Präfix voranzustellenrefs/heads/
?Ich habe ein einfaches Skript namens
git-cbr
( aktueller Zweig ), das den aktuellen Zweignamen ausgibt.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.Dies funktioniert, weil der
git
Befehl sein erstes Argument verwendet und versucht, ein Skript mit dem Namen von auszuführengit-arg1
. Versucht beispielsweise,git branch
ein Skript mit dem Namengit-branch
usw. auszuführen .quelle
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 status
ständig tippen müssen . Github Repo Git-Awareness-Eingabeaufforderung .Öffnen Sie Ihr Terminal (Strg-Alt-T) und geben Sie die Befehle ein
Bearbeiten Sie Ihre .bashrc mit dem
sudo nano ~/.bashrc
Befehl (für Ubuntu) und fügen Sie oben Folgendes hinzu:Fügen Sie dann den Code ein
Am Ende derselben Datei haben Sie den Installationscode zuvor eingefügt. Dadurch erhalten Sie die kolorierte Ausgabe:
quelle
Der folgende Shell-Befehl teilt Ihnen den Zweig mit, in dem Sie sich gerade befinden.
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
.Wenn Sie sich im Zweigstellenmaster befinden und Ihre Eingabeaufforderung lautet
$
, erhalten Sie* master
Folgendes.quelle
git branch | grep '^\*'
Gibt entweder den Zweignamen oder SHA1 zurück, wenn der Kopf abgenommen ist:
Dies ist eine Kurzversion der Antwort von @ dmaestro12 und ohne Tag-Unterstützung.
quelle
git symbolic-ref --quiet --short HEAD || git rev-parse --short HEAD
Wenn Sie wirklich möchten, dass der letzte Zweig / Tag auch im getrennten HEAD-Status ausgecheckt wird.
Update Dies ist schöner, wenn Sie Angst haben und keine Angst haben.
quelle
rev | cut -d' ' -f1| rev
kann vereinfacht werden mitawk '{print $NF}'
checkout: moving from ba7571b7fc5b8f31b8d0625821269afaa655577e to f68be8cf7bea917a5a0562b619e50368de0068a9
es sich immer noch um einen nützlichen Trick handelt, der dazu beitragen kann, einige Fälle eindeutig zu machen.git reflog | awk '$3=="checkout:" {print $NF; exit}'
Ich weiß, dass dies spät ist, aber auf einem Linux / Mac können Sie vom Terminal aus Folgendes verwenden.
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:
quelle
head -1
würde der übliche WegSie 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
quelle
Fügen Sie es zur
PS1
Verwendung des Mac hinzu:Bevor Sie den obigen Befehl ausführen:
Nach dem Ausführen dieses Befehls:
Keine Sorge, wenn es sich nicht um ein GIT-Repository handelt, wird kein Fehler angezeigt,
[-d .git]
wodurch überprüft wird, ob ein.git
Ordner vorhanden ist oder nicht.quelle