Siehe auch:
Wie kann ich sehen, welche Git-Zweige welchen Remote- / Upstream-Zweig verfolgen?
Wie kann ich herausfinden, welchen Remote-Zweig ein lokaler Zweig verfolgt?
Muss ich die git config
Ausgabe analysieren oder gibt es einen Befehl, der dies für mich erledigt?
git
branch
git-remote
Schreibgeschützt
quelle
quelle
git remote show origin
. Die Hauptantwort in der anderen Frage ist ein Bash-Skript, das sich um die einfache Antwort hier dreht, was für einige nützlich sein könnte. Hoffentlich wird diese Frage nicht vollständig geschlossen.Antworten:
Hier ist ein Befehl, der Ihnen alle Tracking-Zweige gibt (konfiguriert für 'Pull'), siehe:
Sie müssen durch die SHA und alle langwierigen Commit-Nachrichten waten, aber es ist schnell zu tippen und ich bekomme die Tracking-Zweige vertikal in der 3. Spalte ausgerichtet.
Wenn Sie Informationen zur Konfiguration "Ziehen" und "Drücken" pro Zweig benötigen, lesen Sie die andere Antwort unter
git remote show origin
.Aktualisieren
Ab Git Version 1.8.5 können Sie den Upstream-Zweig mit
git status
und anzeigengit status -sb
quelle
git branch -av
odergit remote show origin
, was Ihnen einegit status
undgit status -sb
- sobald Sie auf 1.8.5.x aktualisieren, ist diese Frage (und Antwort) irrelevant.Zwei Möglichkeiten:
oder
quelle
%(refname:short)
ist der Name der aktuellen Referenz innerhalb--format
.git help revisions
(einer der wenig bekannten, aber nützlichsten Teile der Dokumente) und suchen nachupstream
.git diff `git rev-parse --abbrev-ref --symbolic-full-name @{upstream}`
echo 'git for-each-ref --format=\'%(refname:short) -> %(upstream:short)\' refs/heads/$1' > ~/bin/git-show-upstream; chmod +x ~/bin/git-show-upstream
git for-each-ref --format='%(upstream:short)' $(git rev-parse --symbolic-full-name SOMEBRANCH)
Ersetzen von SOMEBRANCH durch den Filialnamen oder "HEAD" für die aktuelle FilialeIch denke
git branch -av
, es sagt Ihnen nur, welche Filialen Sie haben und bei welchem Commit sie sich befinden, sodass Sie ableiten können, welche Remote-Filialen die lokalen Filialen verfolgen.git remote show origin
teilt Ihnen explizit mit, welche Zweige welche entfernten Zweige verfolgen. Hier ist eine Beispielausgabe aus einem Repository mit einem einzelnen Commit und einem Remote-Zweig namensabranch
:gegen
quelle
git remote show origin
zeigt Ihnen lokale Zweige und was sie für Push und Pull verfolgen.origin
, während es sich tatsächlich um alles handeln kann (z. B. mehrere Fernbedienungen, wobei verschiedene Zweige Zweige von verschiedenen Fernbedienungen verfolgen).Update: Nun, es ist einige Jahre her, seit ich das gepostet habe! Für meinen speziellen Zweck, HEAD mit Upstream zu vergleichen, verwende ich jetzt
@{u}
eine Verknüpfung, die sich auf den HEAD des Upstream-Tracking-Zweigs bezieht. (Siehe https://git-scm.com/docs/gitrevisions#gitrevisions-emltbranchnamegtupstreamemegemmasterupstreamememuem ).Ursprüngliche Antwort: Ich bin auch auf dieses Problem gestoßen. Ich verwende oft mehrere Fernbedienungen in einem einzigen Repository, und es ist leicht zu vergessen, gegen welche Ihre aktuelle Niederlassung verfolgt. Und manchmal ist es praktisch, das zu wissen, beispielsweise wenn Sie sich Ihre lokalen Commits über ansehen möchten
git log remotename/branchname..HEAD
.All dieses Zeug ist in Git-Konfigurationsvariablen gespeichert, aber Sie müssen die Git-Konfigurationsausgabe nicht analysieren. Wenn Sie git config gefolgt vom Namen einer Variablen aufrufen, wird nur der Wert dieser Variablen gedruckt, ohne dass eine Analyse erforderlich ist. In diesem Sinne finden Sie hier einige Befehle, um Informationen zum Tracking-Setup Ihrer aktuellen Niederlassung zu erhalten:
In meinem Fall mache ich Folgendes, da ich nur daran interessiert bin, den Namen meiner aktuellen Fernbedienung herauszufinden:
quelle
git name-rev --name-only HEAD
Ihnen nicht sagt, auf welchem Zweig Sie sich tatsächlich befinden. Dafür habe ich gerade verwendetgit branch | grep '^\*' | cut -d' ' -f2
@{u}
Alias / keine Verknüpfung und genau das suchte ich! Kein Grund zum Vergleich mit dem Hauptzweig, wenn Sie nur feststellen möchten, ob Sie ziehen müssen oder nicht.@{u}
ist die Bombe. Und gibt es seit 1.7.0, was bedeutet, dass wenn es nicht in einem Git verfügbar ist, das jemand im Jahr 2018 verwendet, wahrscheinlich ein Upgrade ansteht.Die lokalen Niederlassungen und ihre Fernbedienungen.
Alle Filialen und Tracking-Fernbedienungen.
Sehen Sie, wo die lokalen Zweige explizit für Push und Pull konfiguriert sind.
quelle
Dies zeigt Ihnen den Zweig, in dem Sie sich befinden:
Dies zeigt nur den aktuellen Zweig an, in dem Sie sich befinden:
zum Beispiel:
Sie können die URL der Fernbedienung ermitteln , die von dem aktuellen Zweig verwendet wird, in dem Sie sich befinden:
zum Beispiel:
quelle
Sie können verwenden
git checkout
, dh "Überprüfen Sie den aktuellen Zweig". Dies ist ein No-Op mit Nebenwirkungen, um die Tracking-Informationen für den aktuellen Zweig anzuzeigen, falls vorhanden.quelle
Ich weiß nicht, ob dies als Analyse der Ausgabe von git config gilt, aber dies bestimmt die URL der Fernbedienung, die der Master verfolgt:
quelle
git config branch.$(git symbolic-ref -q HEAD).remote
wenn Sie nur den Namen der Fernbedienung des aktuellen Zweigs verfolgen möchten -git config remote.$(git config branch.$(git symbolic-ref -q HEAD).remote).url
für die URL.--short
Option hinzufügen, damit es funktioniert. Also, um den Remote-Namen des aktuellen Zweigs zu erhalten:git config branch.$(git symbolic-ref -q --short HEAD).remote
und um die URL der Remote des aktuellen Zweigs zu erhalten:git config remote.$(git config branch.$(git symbolic-ref -q --short HEAD).remote).url
Noch ein anderer Weg
Das wird dir geben
quelle
Eine andere einfache Möglichkeit ist die Verwendung
cat .git/config
in einem Git RepoHier werden Details für lokale Niederlassungen aufgelistet
quelle
type .git/config
anstelle voncat .git/config
natürlich auf einfacher Befehlszeile verwenden ..Eine andere Methode (danke osse), wenn Sie nur wissen möchten, ob sie existiert oder nicht:
quelle
git branch -vv | grep 'BRANCH_NAME'
git branch -vv
: In diesem Teil werden alle lokalen Niederlassungen zusammen mit ihrer vorgelagerten Niederlassung angezeigt.grep 'BRANCH_NAME'
: Es wird der aktuelle Zweig aus der Zweigliste gefiltert.quelle
listet alle Zweige einschließlich Remote auf.
quelle
Listet sowohl lokale als auch entfernte Zweigstellen auf:
Ausgabe:
quelle
Die Ausgabe von g2-status porcelain (maschinenlesbar) v2 sieht folgendermaßen aus:
Und um den Zweig nur stromaufwärts zu bringen:
Wenn der Zweig keinen Upstream hat, erzeugt der obige Befehl eine leere Ausgabe (oder schlägt mit fehl
set -o pipefail
).quelle
Wenn Sie den Upstream für einen Zweig finden möchten (im Gegensatz zu dem, in dem Sie sich gerade befinden), finden Sie hier eine geringfügige Änderung der Antwort von @ cdunn2001:
git rev-parse --abbrev-ref --symbolic-full-name YOUR_LOCAL_BRANCH_NAME@{upstream}
Dadurch erhalten Sie den Namen des Remote-Zweigs für den genannten lokalen Zweig
YOUR_LOCAL_BRANCH_NAME
.quelle
Sie können dies versuchen:
branch_name
muss durch Ihre Niederlassung ersetzt werdenquelle
git remote show origin
wenn Ihr Filialname mit einem anderen Text in der Ausgabe von übereinstimmt - wenn er aufgerufen wirdmerges
oderconfigure
?Ich benutze diesen Alias
dann
Beachten Sie, dass das Skript auch zum Einrichten der Nachverfolgung verwendet werden kann.
Weitere großartige Aliase unter https://github.com/orefalo/bash-profiles
quelle
Ich benutze EasyGit (auch bekannt als "eg") als superleichtes Wrapper auf (oder neben) Git. EasyGit verfügt über einen Unterbefehl "info", der Ihnen alle Arten von äußerst nützlichen Informationen bietet, einschließlich der aktuellen Zweigstelle für die Fernverfolgung. Hier ist ein Beispiel (wobei der aktuelle Filialname "foo" ist):
quelle
Um diese Antwort zu verbessern , habe ich folgende
.gitconfig
Aliase gefunden:quelle
Wenn Sie Gradle verwenden,
quelle
Der folgende Befehl bezieht sich auf die aktuelle Gabel des Remote-Ursprungs
Zum Hinzufügen eines Remote-Pfads
quelle