Wie kann ich sehen, welche Git-Zweige welchen Remote-/Upstream-Zweig verfolgen?

Lesezeit: 5 Minuten

Wie kann ich sehen welche Git Zweige welchen Remote Upstream Zweig verfolgen
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?

Wie kann ich sehen welche Git Zweige welchen Remote Upstream Zweig verfolgen
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

Wie kann ich sehen welche Git Zweige welchen Remote Upstream Zweig verfolgen
Karl Suster

Wenn Sie sich die Manpage für git-rev-parsesehen Sie, dass die folgende Syntax beschrieben wird:

<branchname>@{upstream}z.B [email protected]{upstream}, @{u}

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:

git rev-parse --abbrev-ref [email protected]{upstream}
# => origin/master

Um die Informationen für jeden Zweig auszudrucken, könnten Sie Folgendes tun:

while read branch; do
  upstream=$(git rev-parse --abbrev-ref [email protected]{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 [email protected]{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

1646630893 795 Wie kann ich sehen welche Git Zweige welchen Remote Upstream Zweig verfolgen
Abizern

Eine Alternative zu kubis Antwort ist ein Blick auf die .git/config Datei, die die lokale Repository-Konfiguration zeigt:

cat .git/config

git for-each-ref --format="%(refname:short) <- %(upstream:short)" refs/heads

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

1646630893 960 Wie kann ich sehen welche Git Zweige welchen Remote Upstream Zweig verfolgen
Gemeinschaft

Für die Strom Filiale, hier sind zwei gute Möglichkeiten:

% git rev-parse --abbrev-ref --symbolic-full-name @{u}
origin/mainline

oder

% git for-each-ref --format="%(upstream:short)" $(git symbolic-ref -q HEAD)
origin/mainline

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

1646630894 795 Wie kann ich sehen welche Git Zweige welchen Remote Upstream Zweig verfolgen
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

963160cookie-checkWie kann ich sehen, welche Git-Zweige welchen Remote-/Upstream-Zweig verfolgen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy