it-swarm.com.de

git ahead/behind info zwischen master und branch?

Ich habe einen Zweig zum Testen in meinem lokalen Repo (test-branch) erstellt, den ich auf Github verschoben habe.

Wenn ich zu meinem Konto Github gehe und diesen test-branch auswähle, werden die Informationen angezeigt:

This branch is 1 commit ahead and 2 commits behind master

Meine Fragen sind:

  1. Wie kann ich diese Informationen lokal anzeigen (dh ein Befehl, der dies auf dem Terminal anzeigt, statt Github öffnen zu müssen, um sie anzeigen zu können)?
  2. Ich weiß, dass ich die Unterschiede zwischen den Zweigen sehen kann:

    git diff master..test-branch
    

    oder Meld verwenden (was mir lieber ist):

    git difftool master..test-branch
    

    ich frage mich jedoch, ob es eine Möglichkeit gibt, die ahead - und behind - Commits separat zu sehen. I.E .: Gibt es eine Möglichkeit zu zeigen, dass 1 sich von selbst vornimmt und dann diese 2 sich selbst hinter begeht?

135
Gabriel

Hier ist ein Trick, den ich gefunden habe, um zwei Zweige zu vergleichen und zu zeigen, wie viele Commits jeder Zweig vor dem anderen ist (eine allgemeinere Antwort auf Ihre Frage 1):

Für local zweige: git rev-list --left-right --count master...test-branch

Für remote zweige: git rev-list --left-right --count Origin/master...Origin/test-branch

Dies ergibt eine Ausgabe wie folgt:

1 7

Diese Ausgabe bedeutet: "Verglichen mit master ist test-branch 7 Commits und 1 Commit dahinter."

Sie können lokale Zweigstellen auch mit entfernten Zweigstellen vergleichen, z. Origin/master...master, um herauszufinden, wie viele Commits sich der lokale Zweig master vor/hinter seinem entfernten Gegenstück befindet.

211
user1834095

Um zu sehen, wie viele Revisionen Sie lokal hinter sich haben, sollten Sie einen git fetch ausführen, um sicherzustellen, dass Sie die neuesten Informationen von Ihrer Fernbedienung haben.

Die Standardausgabe von git status sagt Ihnen, wie viele Revisionen Sie vor oder hinter sich haben, aber normalerweise finde ich das zu ausführlich:

$ git status
# On branch master
# Your branch and 'Origin/master' have diverged,
# and have 2 and 1 different commit each, respectively.
#
nothing to commit (working directory clean)

Ich bevorzuge git status -sb:

$ git status -sb
## master...Origin/master [ahead 2, behind 1]

Tatsächlich habe ich den Alias ​​einfach git s genannt, und dies ist der Hauptbefehl, den ich zur Statusprüfung benutze.

Um den Unterschied in der "Vorwärtsversion" von master zu sehen, kann ich die "Hinterversion" von Origin/master ausschließen:

git diff master..Origin/master^

Um den Unterschied in den "Hinterlegungen" von Origin/master zu sehen, kann ich die "Vorgängerversionen" von master ausschließen:

git diff Origin/master..master^^

Wenn vor oder hinter 5 Revisionen liegen, ist es möglicherweise einfacher, so zu schreiben:

git diff master..Origin/master~5
git diff Origin/master..master~5

UPDATE

Um die Vor/Hinter-Versionen zu sehen, muss der Zweig so konfiguriert sein, dass er einen anderen Zweig verfolgt. Für mich ist dies das Standardverhalten, wenn ich ein entferntes Repository klone und danach einen Zweig mit git Push -u remotename branchname schiebe. Meine Version ist 1.8.4.3, aber sie funktioniert so lange, wie ich mich erinnere.

Ab Version 1.8 können Sie den Tracking-Zweig folgendermaßen einstellen:

git branch --track test-branch

Ab Version 1.7 war die Syntax anders:

git branch --set-upstream test-branch
29
janos

Mit Git 2.5+ haben Sie jetzt eine weitere Option, mit der Sie für alle Zweige, die für Push an einen Zweig konfiguriert sind, voraus/zurückblicken können.

git for-each-ref --format="%(Push:track)" refs/heads

Mehr dazu unter " Unpushed Git Commits anzeigen "

8
VonC

Nach dem Ausführen eines Git-Abrufs können Sie den Git-Status ausführen, um anzuzeigen, wie viele Commits der lokale Zweig vor oder hinter der Remote-Version des Zweigs ist.

Dies zeigt Ihnen jedoch nicht, wie viele Commits vor oder hinter einem anderen Zweig liegen. Ihre Optionen sind der vollständige Unterschied, wenn Sie sich Github ansehen oder eine Lösung wie Vimhsa verwenden, die oben verlinkt ist: Git-Status über alle Repos

1
Wade Williams