Wie kann ich sehen, welche Git-Zweige welchen Remote-/Upstream-Zweig verfolgen?
Lesezeit: 5 Minuten
joachim
Ich weiß, dass ich es kann git branch --allund das zeigt mir sowohl lokale als auch Remote-Zweige, aber es ist nicht so nützlich, um mir die Beziehungen zwischen ihnen zu zeigen.
Wie liste ich Verzweigungen so auf, dass angezeigt wird, welche lokale Verzweigung welche Remote verfolgt?
Cascabel
Sehr viel ein Porzellanbefehl, nicht gut, wenn Sie dies zum Skripten wollen:
git branch -vv # doubly verbose!
Beachten Sie, dass mit Git 1.8.3 dieser Upstream-Zweig in angezeigt wird Blau (siehe “Was ist diese Verzweigungsverfolgung (wenn überhaupt) in Git?”)
Wenn Sie eine saubere Ausgabe wünschen, lesen Sie die Antwort von arcresu – sie verwendet einen Porzellanbefehl, von dem ich glaube, dass er zu der Zeit, als ich diese Antwort ursprünglich geschrieben habe, nicht existierte, also ist er etwas prägnanter und funktioniert mit Zweigen, die für Rebase konfiguriert sind, nicht nur für das Zusammenführen.
Die erste Methode oben liefert mir nicht die gewünschten Informationen. Das zweite … scheint übertrieben zu sein, zumal Kubis Antwort funktioniert. Übersehe ich etwas?
– garp
29. August 2012 um 13:24 Uhr
@garyp Du bist nicht derjenige, der die Frage gestellt hat. Die erste lieferte das, was das OP benötigte, und die zweite lieferte exakt was er brauchte, falls er es in einer sauberen Form zum Skripten haben wollte oder es nur als Alias speichern wollte. (“Overkill” ist in Ordnung, wenn es Ihnen das bringt, was Sie wollen, und Sie müssen es nicht wiederholen.) Aus Sicht dieser Frage enthält die Antwort von kubi einige irrelevante Informationen, und wenn es mehr als eine Fernbedienung gibt, ist dies der Fall Zeigen Sie nicht alles, aber wenn es Ihren Anforderungen entspricht, verwenden Sie es auf jeden Fall.
– Kaskabel
29. August 2012 um 15:21 Uhr
Ich schulde Entschuldigung. Als ich ursprünglich die erste Methode ausgeführt habe, bekam ich Nein Informationen darüber, was was verfolgt, und das hätte ich ausdrücklich sagen sollen. Aber jetzt sehe ich die Tracking-Informationen, also muss etwas mit meiner Einrichtung nicht stimmen. Also ich war etwas vermissen.
– garp
29. August 2012 um 19:33 Uhr
FWIW Ich war verwirrt, weil -v und -vv eine so ähnliche Ausgabe zeigen. Der nachverfolgte Zweig wird in eckigen Klammern nach dem Hash und vor dem letzten Commit angezeigt (bei meiner standardmäßigen OSX-Homebrew-Installation).
– Jerk
24. Oktober 2012 um 17:31 Uhr
Alles, was das für mich bedeutet, ist, den letzten Commit-Hash auszudrucken und für jeden Zweig zu kommentieren.
– Wasserschwein
26. Februar 2015 um 19:35 Uhr
git remote show origin
Ersetzen Sie ‘origin’ durch den Namen Ihrer Fernbedienung.
Obwohl dieser Porzellanbefehl irgendwie für einen Menschen funktioniert (nicht so sehr für ein Skript, da er die Porzellanausgabe analysieren müsste), gefällt mir an diesem Ansatz Folgendes nicht git remote show Der Befehl stellt tatsächlich eine Verbindung zum Remote-Repo her … und schlägt daher fehl, wenn Sie offline sind oder aus irgendeinem Grund keine Verbindung zum Repo herstellen können …
– pvandenberg
8. September 2013 um 12:37 Uhr
@pvandenberk Sie können verwenden git remote show -n origin um auch offline einige Informationen zu erhalten. Von dem Git-Remote-Dokumentation: “Mit der Option -n werden die Remote Heads nicht zuerst mit git ls-remote abgefragt; stattdessen werden zwischengespeicherte Informationen verwendet.”
– Ceran
5. März 2014 um 12:21 Uhr
Eine merkwürdige Sache an diesem Befehl: Er listet entfernte Branches als „nachverfolgt“ auf, selbst wenn kein lokaler Branch für Pull/Push konfiguriert ist. Ich finde das immer verwirrend. Mir ist eigentlich nicht klar, was “verfolgt” in dieser Ausgabe bedeuten soll. Die Git-Dokumentation zum Thema Lassen Sie es so klingen, als würde ein entfernter Zweig nur “verfolgt”, wenn er für Push / Pull mit einem lokalen Zweig verbunden / verbunden ist …
– Hawkeye Parker
7. Februar 2015 um 0:44 Uhr
Das Problem ist, dass ich dies für alle entfernten Namen aufrufen muss, bis ich sehe, wonach ich tatsächlich suche.
– jolvi
20. Januar 2016 um 10:15 Uhr
@jolvi Du könntest rennen git remote show | xargs git remote show -n um kombinierte Tracking-Informationen für alle Fernbedienungen anzuzeigen.
– Synoli
20. Mai 2016 um 8:48 Uhr
Karl Suster
Wenn Sie sich die Manpage für git-rev-parsesehen Sie, dass die folgende Syntax beschrieben wird:
Das Suffix @{upstream} zu einem Zweignamen (Kurzform <branchname>@{u}) bezieht sich auf die Verzweigung, auf der die durch Verzweigungsname angegebene Verzweigung aufgebaut werden soll. Ein fehlender Branchname wird standardmäßig auf den aktuellen gesetzt.
Daher den stromaufwärts der Verzweigung zu finden masterDu würdest:
Um die Informationen für jeden Zweig auszudrucken, könnten Sie Folgendes tun:
while read branch; do
upstream=$(git rev-parse --abbrev-ref $branch@{upstream} 2>/dev/null)
if [[ $? == 0 ]]; then
echo $branch tracks $upstream
else
echo $branch has no upstream configured
fi
done < <(git for-each-ref --format="%(refname:short)" refs/heads/*)
# Output:
# master tracks origin/master
# ...
Dies ist sauberer als das manuelle Analysieren von Refs und Konfigurationen.
Ich konnte dieses Bit in rev-parse nicht verstehen, obwohl ich es gefunden habe, also danke für die klare Erklärung!
– Alice Purcell
19. September 2013 um 13:35 Uhr
Für diejenigen von uns, die Git-Flow mit Zweigen namens „feature/blahblah“ verwenden, sollte die abschließende Anweisung der While-Schleife lauten: done < <(git for-each-ref --format='%(refname:short)' refs/heads/**) Beachten Sie das zwei Sternchen am Ende des Glob-Musters.
– Markeissler
31. Januar 2015 um 22:29 Uhr
git rev-parse --abbrev-ref HEAD@{upstream} scheint für den aktuellen Zweig gut zu funktionieren. Es ist auch ein netter Git-Alias.
– Digikata
22. November 2017 um 19:52 Uhr
Die while Schleifensyntax sieht für mich etwas seltsam aus. Sie können einfach verwenden git for-each-ref ... | while read branch; do ... die keinen FIFO benötigt und in der gleichen Reihenfolge wie die geschriebenen Befehle ausgeführt wird.
– Daniel Böhmer
3. Mai 2018 um 7:21 Uhr
Spätestens seit Git 2.5.1 haben Sie einen Einzeiler mit git for-each-ref --format='%(refname:short) tracks %(upstream:short)' refs/heads/*
– Mat M
8. August 2018 um 6:25 Uhr
Abizern
Eine Alternative zu kubis Antwort ist ein Blick auf die .git/config Datei, die die lokale Repository-Konfiguration zeigt:
zeigt eine Linie für jede lokale Niederlassung. Ein Tracking-Zweig sieht folgendermaßen aus:
master <- origin/master
Ein Non-Tracking sieht so aus:
test <-
Schön, etwas Bestell- und TAB-Bett-Ausgabe hinzuzufügen: git for-each-ref –sort upstream –format=’%(refname:short)%09<- %(upstream:short)' refs/heads
– Dimir
7. Juni 2019 um 11:45 Uhr
Schön prägnant und die Ausgabe ist tatsächlich viel besser lesbar als die akzeptierte git branch -vv. 🙏
– joki
20. November 2019 um 13:14 Uhr
Das einzige Problem ist, dass ich mich nicht daran erinnern kann, also habe ich verwendet git config --global alias.track 'for-each-ref --format='\''%(refname:short) <- %(upstream:short)'\'' refs/heads'
– joki
20. November 2019 um 13:35 Uhr
Gemeinschaft
Für die Strom Filiale, hier sind zwei gute Möglichkeiten:
Diese Antwort ist auch hier auf eine etwas andere Frage, die (fälschlicherweise) als Duplikat markiert wurde.
Schön, etwas Bestell- und TAB-Bett-Ausgabe hinzuzufügen: git for-each-ref –sort upstream –format=’%(refname:short)%09<- %(upstream:short)' refs/heads
– Dimir
7. Juni 2019 um 11:45 Uhr
Schön prägnant und die Ausgabe ist tatsächlich viel besser lesbar als die akzeptierte git branch -vv. 🙏
– joki
20. November 2019 um 13:14 Uhr
Das einzige Problem ist, dass ich mich nicht daran erinnern kann, also habe ich verwendet git config --global alias.track 'for-each-ref --format='\''%(refname:short) <- %(upstream:short)'\'' refs/heads'
– joki
20. November 2019 um 13:35 Uhr
Eugen Yarmash
Für den Stromzweig könnte man auch sagen git checkout (ohne Zweig). Dies ist eine No-Op mit Nebeneffekten, um die Tracking-Informationen, falls vorhanden, für den aktuellen Zweig anzuzeigen.
$ git checkout
Your branch is up-to-date with 'origin/master'.
Fair genug, aber Sie können versehentlich tippen git checkout .was kein No-Op ist.
– Tomasz Gandor
17. Juli 2019 um 11:03 Uhr
Sie können wirklich alles versehentlich eingeben.
– James Gawron
8. Dezember 2020 um 21:49 Uhr
9631600cookie-checkWie kann ich sehen, welche Git-Zweige welchen Remote-/Upstream-Zweig verfolgen?yes